正则表达式 - javascript
我知道这是一件简单的事情。但我不能让它工作。正则表达式 - javascript
Req:包含至少一个数字,字母(可以是两种情况)和至少一个符号(特殊字符)的单词。 (?=。[0-9])(?=。 [a-zA-z])(?=。* [!@#$%_])工作。但在JavaScript中不起作用。 似乎它总是在开始寻找数字,因为我的状态以regexp.f中的数字开头
任何人都可以给我一个可用于javascript的正则表达式吗?
-Rakesh
我不认为JavaScript支持这些lookaheads。尝试
/(.*[a-zA-Z].*[0-9].*[[email protected]#$%_].*|.*[a-zA-Z].*[[email protected]#$%_].*[0-9].*|.*[0-9].*[a-zA-Z].*[[email protected]#$%_].*|.*[[email protected]#$%_].*[a-zA-Z].*[0-9].*|.*[0-9].*[[email protected]#$%_].*[a-zA-Z].*|.*[[email protected]#$%_].*[0-9].*[a-zA-Z].*)/
不奢望任何点优雅...
编辑:作为bdukes指出,JS不支持向前看符号。然而,这个(丑陋的)表达确实起作用。
你欠我一些建议。 – Erik 2010-01-06 18:21:57
哈哈,对不起。当我在喝咖啡之前回答问题时会发生这种情况。 – 2010-01-06 18:31:33
JavaScript确实支持lookaheads。但是,您的小组会期望在数字和字母之前至少有一个字符(因为它们仅以点号.
开头)。尝试添加*
到这两个点:
var pattern = /(?=.*[0-9])(?=.*[a-zA-z])(?=.*[[email protected]#$%_])/;
pattern.test('xxx'); // false
pattern.test('111'); // false
pattern.test('!!!'); // false
pattern.test('x1!'); // true
我看到了同样的问题,在C#正则表达式,太。
只是为了覆盖显而易见的答案,考虑到所述的要求,我会使用单独的测试。
/[0-9]/.test(string) && /[a-z]/i.test(string) && /[[email protected]#$%_]/.test(string)
如果您有兴趣将这个抽象出来,一种方法是将测试存储在一个数组中。
var tests = [ /[0-9]/, /[a-z]/i, /[[email protected]#$%_]/ ];
还有一种方法来评估多个测试而不修改周围代码的范围,只需将它锁到闭包中即可。
var passes = (function(){
for (var i=0; i<tests.length; i++)
if (!tests[i].test(string)) return false;
return true;
})();
你可以有一个很长的REG EXP,用三种字符在differtent顺序重复,或者使用超过一种测试
function teststring(s){
return /^[\[email protected]#$%_]+$/.test(s) &&
/\d/.test(s) && /[a-zA-Z]/.test(s) && /[[email protected]#$%_]/.test(s);
}
向我们展示你的JavaScript代码。 – 2010-01-06 18:17:52
超级有用+用于调试正则表达式的免费工具:http://weitz.de/regex-coach/ – Seth 2010-01-06 18:19:30