2012-11-15 40 views
0

我試圖在JS中編寫一個正則表達式來識別多達七次的數字,然後是「 - 」後跟兩位數字,然後是「 - 」之後是一個數字。這是一個簡單的正則表達式我有:Javascript正則表達式對象無法識別{n,m}

/\d{1,7}-\d{2}-\d/g 

這應該與像字符串:

  • 123-12-7
  • 1-12-7
  • 1234567-12-7

但不12345678-12-1

但是,以上是返回true。當第一組中有任意數量的數字時,正則表達式返回true。

JavaScript Regex對象不支持{n,m}嗎?

這是我正在談論的一個例子。

var pattern = new RegExp(/\d{1,7}-\d{2}-\d/); 
alert(pattern.test("12345678-13-1")); 

http://jsfiddle.net/XTRAc/1/活生生的例子

+2

不要執行新的RegExp(/ \ d {1,7} - \ d {2} - \ d /)'。使用'pattern =/\ d {1,7} - \ d {2} - \ d /;'*或*'pattern = new RegExp('\ d {1,7} - \ d {2} - \ d');',不是兩個。 –

回答

6

它匹配2345678-13-1。你需要把它anchor來開始和你的字符串的結尾:

/^\d{1,7}-\d{2}-\d$/ 

不過請注意,(火箭危險品指出的),你並不需要,如果你使用正則表達式文字(東西不使用RegExp構造字符串引號)。

JSFiddle

1

您正在構建您的正則表達式不正確。試試這個(注意錨,保證了字符串包含什麼,但你的模式):

var pattern= /^\d{1,7}-\d{2}-\d$/; 

否則,現有的字符串的子集將匹配您的正則表達式。

0

它不支持{N,M}部分,這裏的問題是,你的例子匹配2345678,所以你需要的第一組數字前的字符匹配的方式

1

如果您需要驗證整個輸入字符串,使用正則表達式

/^\d{1,7}-\d{2}-\d$/ 

如果您需要驗證輸入字符串的整條生產線,使用正則表達式

/^\d{1,7}-\d{2}-\d$/mg 

如果需要輸入字符串內找到匹配,使用正則表達式

/(?:\D|^)(\d{1,7}-\d{2}-\d)(?!\d)/g 

。 ..並使用$1作爲結果。

相關問題