2013-05-15 50 views
5

我試圖做一個javascript正則表達式匹配:正則表達式分鐘9號

  • 要求:9個或多個數字。
  • 可選:短劃線,正斜槓,加號和空格字符。
  • 禁止:任何其它字符

到目前爲止,我有

^[0-9-+\/\s]{9,}$ 

與此唯一的問題(我認爲)是它沿計數的非數字允許的字符達到最低9。

我該如何修改它,使它只計數達到最小值9?

+1

例如,ssn 000-11-2222,它是9位數字,但是11個字符? – hometoast

回答

7

如果你想在一個RE解決這個(不一定是推薦的,但有時是有用的):

^[-+\/\s]*([0-9][-+\/\s]*){9,}$ 

或者,如果你想第一個和最後一個字符是數字:

^[0-9](^[-+\/\s]*[0-9]){8,}$ 

即:一個數字,後跟八個或更多可選字符,每個以數字結尾。

+1

'[ - + \/\ s] +' - >不應該是'[ - + \/\ s] *'?破折號是可選的。 – nothrow

+0

@Yossarian:是的。謝謝。 –

+0

您可以節省一天的時間,謝謝 – Amol

1

^([0-9][-+\/\s]*){9,}$應該做的。

+1

當第一個字符不是數字時,這不起作用,但它在最後允許非數字。 –

3

您可以使用前瞻,以檢查是否有9個或多個數字的任何地方

^(?=(\D*\d){9,})[\d/+ -]+$ 
-------------- 
     | 
     |->match further only if there are 9 or more digits anywhere 

OR

^([/+ -]*\d){9,}[/+ -]*$ 
+0

+1,但'\ D'比'[^ \ d]'好。 –

+0

@TimPietzcker確實是先生..感謝您的建議..編輯ans – Anirudha

0

其簡單與前瞻

試試這個模式:

^(?=([^\d]*\d){9,})[0-9-+\/\s]*$ 
+1

量詞'{9,}'在最後是不必要的。這和我的答案類似:P – Anirudha

+0

如果您使用{9,}正則表達式比使用+更快。因爲如果它少於9個字符,則不需要檢查前瞻 – Civa

+0

不,它比較慢。你已經在前瞻中做了長度檢查。爲什麼再這樣做? –