web-dev-qa-db-ja.com

記号に一致する正規表現:!$%^&*()_ + |〜-= `{} []:"; '<>?、。/

JavaScriptでRegexテストを作成して、これらの文字を含む文字列をテストしようとしています。

!$%^&*()_+|~-=`{}[]:";'<>?,./

もし興味があるなら:)

私が取り組んでいる非常にクールなパスワード変更アプリケーションのためです。興味のある方のために、残りのコードを紹介します。

パスワード要件をリストした表があり、エンドユーザーが新しいパスワードを入力すると、正規表現の配列をテストし、対応する表の行にチェックマークを付けます...チェックアウト:)これを追加するだけですvalidation配列の4番目の項目の代わりに。

var validate = function(password){
    valid = true;

    var validation = [
        RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
        RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
        !RegExp($('#txtUsername').val()).test(password), !RegExp("Cisco").test(password), 
        !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
    ]

    $.each(validation, function(i){
        if(this)
            $('.form table tr').eq(i+1).attr('class', 'check');
        else{
            $('.form table tr').eq(i+1).attr('class', '');
            valid = false
        }
    });

    return(valid);

}

はい、対応するサーバー側の検証もあります!

76
pixelbobby

これの正規表現は本当に簡単です。文字クラスを使用するだけです。ハイフンは文字クラスの特殊文字であるため、最初にする必要があります。

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/

他の正規表現のメタキャラクターもエスケープする必要があります。

Edit:ハイフンは、文字の範囲を表すために使用できるため、特別です。この同じ文字クラスは、次の範囲で簡素化できます。

/[$-/:-?{-~!"^_`\[\]]/

3つの範囲があります。 「$」を「/」に、「:」を「?」に、「{」を「〜」に。最後の文字列は、! "^ _` []の範囲でより単純に表すことはできません。

ACSIIテーブル を使用して、文字クラスの範囲を検索します。

141
Jeff Hillman

最もシンプルで最短の方法は、これを使用することです:

/[\W\S]/

つまり、数字でも英字でもないすべての文字(\W)または空白文字(\S)です。

ジェフのソリューションほど完璧ではないかもしれませんが、もっとシンプルで実用性に違いはないと思います。

3
Amir