[英]Password validation regexp
我正在嘗試使用regexp進行密碼驗證
^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$
它限制至少1位數字,1個大寫字母和1個小寫字母,不是嗎?
那么為什么以下結果true
?
(new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).test('aaAAffffaAfDvad')
但下一個false
嗎?
(new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,}$')).test('aaAA112')
在你的JS控制台(firebug或其他)中試試這個:
var re = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
這個:
var re2 = new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$')
那么你只需檢查一下結果......你會發現在re2中, \\d
沒有正確轉義為正則表達式而是為字符串轉義。
這是因為\\
in \\d
未正確轉義:
>>> var x = new RegExp('^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$');
>>> x
/^(?=.*d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
>>> var x = new RegExp('^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$');
>>> x
/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$/
您還可以使用此函數進行正確的regexp轉義:
RegExp.escape = function(s) {
return s.replace( /[-\/\\^$*+?.()|[\]{}]/g, "\\$&" );
};
var x = new RegExp( RegExp.escape( '^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,20}$') );
可能不是最有效的方式,但可以擴展。
requirements = [ /\d/, /[A-Z]/, /[a-z]/, /^.{6,20}$/ ];
function passwordValid( password ) {
var i = requirements.length;
while( i-- ) {
if( !requirements[i].test( password ) ) return false;
}
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.