2012-11-15 29 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作为结果。

相关问题