我知道這是一件簡單的事情。但我不能讓它工作。正則表達式 - javascript
Req:包含至少一個數字,字母(可以是兩種情況)和至少一個符號(特殊字符)的單詞。 (?=。[0-9])(?=。 [a-zA-z])(?=。* [!@#$%_])工作。但在JavaScript中不起作用。 似乎它總是在開始尋找數字,因爲我的狀態以regexp.f中的數字開頭
任何人都可以給我一個可用於javascript的正則表達式嗎?
-Rakesh
我知道這是一件簡單的事情。但我不能讓它工作。正則表達式 - 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