2013-05-29 207 views
0

我希望有一個正則表達式模式只允許字母數字值,既不是僅字母也不數字,具有最小長度= 4,最大長度= 15,正則表達式模式

我使用/^[a-zA-Z0-9]{4,15}$/試過,但這種模式還允許只有字母和只有數字。

請幫我

+0

您提到的正則表達式模式應該允許使用字母或數字。 – SiddharthaRT

+0

@SiddharthaRT這就是他只想得到混合結果的問題 – WhileTrueSleep

回答

2

這應該做的伎倆:

^(?=^.{4,15}$)([a-zA-Z]+[0-9][a-zA-Z0-9]*|[0-9]+[a-zA-Z][a-zA-Z0-9]*)$

看到這裏的工作例如:http://regexr.com?351ia

說明:(更新:現在長度檢查)

首先看正面(?=^.{4,15}$)檢查您的字符串的長度。

如果字符串以字母的正則表達式的這一部分開始被用來評價它:

[a-zA-Z]+[0-9][a-zA-Z0-9]*

  • [a-zA-Z]+意味着該字符串開頭與至少一個字母
  • [0-9]然後在有些點必須有一個數字
  • [a-zA-Z0-9]*後面是任意數量或字母的數字

如果字符串以數字開頭使用正則表達式的第二部分:

[0-9]+[a-zA-Z][a-zA-Z0-9]*

同上,只是這一次有必須在字符串中某處的信。

+0

您沒有檢查長度限制。 – HBP

+0

是的,剛剛也看到了。感謝您的提醒。 ;) – Friederike

0

您可能希望做一個雙向的前瞻來查找數字和字母,一旦找到數字和字母,匹配就會繼續,否則就不會。

正則表達式:/^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{4,15}$/

0

使用原來的字母數字和長度測試,然後驗證字符串包含字母數字通過測試一個數字,然後按一個字母或字符串中反之亦然任何地方。

/^[a-z\d]{4,15}$/i.test (s) && /\d[a-z]|[a-z]\d/i.test (s);