0

我正在尝试在 JS 中编写一个正则表达式来识别最多七次的任何数字,然后是“-”,然后是 2 个数字,然后是“-”,然后是一个数字。这是我拥有的简单正则表达式:

/\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/现场示例

4

5 回答 5

6

它匹配2345678-13-1。您需要将其锚定到字符串的开头和结尾:

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

RegExp但是请注意,(正如 Rocket Hazmat 指出的那样)如果您使用正则表达式文字(没有字符串引号的东西),则不需要使用构造函数。

JSFiddle

于 2012-11-15T15:49:23.537 回答
4

它确实支持{min,max}-syntax,但.match.test()尝试查找匹配的子字符串。您将必须包括开始和结束锚点。另请注意,您应该使用构造函数从字符串RegExp正则表达式文字构建正则表达式,但不能同时使用两者(参见MDN:创建正则表达式)。

/^\d{1,7}-\d{2}-\d$/
new RegExp("^\\d{1,7}-\\d{2}-\\d$") // the worse choice
于 2012-11-15T15:48:19.343 回答
1

您正在错误地构建您的正则表达式。试试这个(注意锚点,它确保字符串只包含你的模式):

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

否则现有字符串的子集将匹配您的正则表达式。

于 2012-11-15T15:48:51.630 回答
1

如果您需要验证整个输入字符串,请使用正则表达式模式

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

如果您需要验证整行输入字符串,请使用正则表达式模式

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

如果您需要在输入字符串中查找匹配项,请使用正则表达式模式

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

...并$1因此使用。

于 2012-11-15T16:04:52.967 回答
0

它确实支持 {n,m} 部分,这里的问题是您的示例匹配2345678,因此您需要一种在第一组数字之前匹配字符的方法

于 2012-11-15T15:51:47.353 回答