正则表达式 - javascript

时间:2010-01-06 18:17:10

标签: javascript regex

我知道这很简单。但我不能让它发挥作用。

请求:包含至少一个数字,字母(可以是两种情况)和至少一个符号(特殊字符)的单词。

在c#(?=。 [0-9])(?=。 [a-zA-z])(?=。* [!@#$%_])工作。但在JavaScript中它不起作用。 似乎它总是在开始时查找数字,因为我的条件以regexp.f中的数字开头

任何人都可以给我一个可以在javascript中使用的正则表达式吗?

-Rakesh

4 个答案:

答案 0 :(得分:2)

JavaScript确实支持前瞻。但是,您的群组希望在数字和字母之前至少有字符(因为它们只是以点.开头)。尝试为这两个点添加*

var pattern = /(?=.*[0-9])(?=.*[a-zA-z])(?=.*[!@#$%_])/;
pattern.test('xxx'); // false
pattern.test('111'); // false
pattern.test('!!!'); // false
pattern.test('x1!'); // true

我也在C#中看到了这个正则表达式的同样问题。

答案 1 :(得分:1)

为了涵盖明显的答案,考虑到所述的要求,我会使用单独的测试。

/[0-9]/.test(string) && /[a-z]/i.test(string) && /[!@#$%_]/.test(string)

如果你有兴趣抽象出来,一种方法是将测试存储在一个数组中。

var tests = [ /[0-9]/, /[a-z]/i, /[!@#$%_]/ ];

在不修改周围代码范围的情况下评估多个测试的一种方法,只需将其置于闭包中即可。

var passes = (function(){
    for (var i=0; i<tests.length; i++)
        if (!tests[i].test(string)) return false;
    return true;
})();

答案 2 :(得分:0)

我认为javascript不支持这些前瞻。尝试

/(.*[a-zA-Z].*[0-9].*[!@#$%_].*|.*[a-zA-Z].*[!@#$%_].*[0-9].*|.*[0-9].*[a-zA-Z].*[!@#$%_].*|.*[!@#$%_].*[a-zA-Z].*[0-9].*|.*[0-9].*[!@#$%_].*[a-zA-Z].*|.*[!@#$%_].*[0-9].*[a-zA-Z].*)/

不要期待任何优雅点......

编辑:正如bdukes指出的,js确实支持前瞻。但是,这个(丑陋的)表达确实有用。

答案 3 :(得分:0)

你可以有一个非常长的reg exp,三个字符类以不同的顺序重复,或者使用多个测试 -

function teststring(s){
 return /^[\da-zA-Z!@#$%_]+$/.test(s) &&
 /\d/.test(s) && /[a-zA-Z]/.test(s) && /[!@#$%_]/.test(s);
}