正则表达式在我的脑海中简直是邪恶的,无论我阅读任何文档多少次,我似乎无法掌握最简单的表达式!
我正在尝试编写一个非常简单的表达式来查询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。
非常感谢任何协助。
干杯
答案 0 :(得分:3)
使用此正则表达式
/^(so-)\d{6}$/i;
没有^
(字符串开始)或$
(字符串结尾)你正在寻找一个通用的子字符串匹配(那是当你有7位数时你的正则表达式返回true的原因。)
答案 1 :(得分:3)
通过使用锚点^
和$
(分别匹配行和行尾的开头),可以使正则表达式与整行匹配。否则,只要正则表达式中的字符匹配,匹配就返回true。
所以,你会像这样申请:
var _reg = /^(so-)\d{6}$/i;