4

正则表达式在我看来简直是邪恶的,无论我阅读任何文档多少次,我似乎都无法掌握即使是最简单的表达式!

我正在尝试编写一个非常简单的表达式来查询 javascript 中的变量,但我无法让它正常工作。

我正在尝试验证以下内容:-

字符串长度必须为 9 个字符,以 SO-(不区分大小写,例如 So-、so-、sO- 和 SO-)开头,后跟 6 个数字。

所以以下应该都匹配

SO-123456、SO-123456、SO-456789、SO-789123

但以下应该失败

SO-12d456、SO-1234567

等等等等

到目前为止,我只设法做到了这一点

var _reg = /(SO-)\d{6}/i;

var _tests = new Array();
_tests[0] = "So-123456";
_tests[1] = "SO-123456";
_tests[2] = "sO-456789";
_tests[3] = "so-789123";
_tests[4] = "QR-123456";
_tests[5] = "SO-1234567";
_tests[6] = "SO-45k789";

for(var i = 0; i < _tests.length; i++){
  var _matches = _tests[i].match(_reg);
  if(_matches && _matches.length > 0)
     $('#matches').append(i+'. '+_matches[0] + '<br/>');
}

以上示例请参见http://jsfiddle.net/TzHKd/

测试编号 5 匹配,但它应该失败,因为有 7 个数字而不是 6 个。

任何帮助将不胜感激。

干杯

4

2 回答 2

3

改用这个正则表达式

/^(so-)\d{6}$/i;

如果没有^(字符串开头)或$(字符串结尾),您正在寻找一个通用的子字符串匹配(这就是当您有 7 位数字时您的正则表达式返回 true 的原因)。

于 2013-09-02T11:19:54.383 回答
3

通过使用锚点^$(分别匹配行首和行尾),您可以使正则表达式匹配整行。否则,只要匹配正则表达式中的字符,匹配就返回 true。

因此,您将像这样应用它:

var _reg = /^(so-)\d{6}$/i;
于 2013-09-02T11:21:44.443 回答