簡體   English   中英

密碼驗證regexp

[英]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沒有正確轉義為正則表達式而是為字符串轉義。

編輯:發現Javascript:無論我的表達是什么,RegExp都無法正常工作

這是因為\\ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM