Javascript Regex - 9个字符长,以'SO-'开头,以6个数字结尾

时间:2013-09-02 11:18:31

标签: javascript regex

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

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

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

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

所以以下内容应该全部匹配

SO-123456, 所以-123456, SO-456789, 所以-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。

非常感谢任何协助。

干杯

2 个答案:

答案 0 :(得分:3)

使用此正则表达式

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

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

答案 1 :(得分:3)

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

所以,你会像这样申请:

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