6

私はここで本当に遅れているか、それとも単に睡眠不足ですが、なぜこれが機能しないのですか?「or」演算子を使用すると、個別のテストごとに機能しますが、「and」演算子に変更するとすぐに機能しなくなります。

フォームのパスワード入力をテストして、フォームに小文字、大文字、および少なくとも1つの記号が含まれているかどうかを確認しようとしています。私はこれに多くの問題を抱えているので、助けが素敵だと思います。これが私が持っているコードです。

var upperCase= new RegExp('[^A-Z]');
var lowerCase= new RegExp('[^a-z]');
var numbers = new RegExp('[^0-9]');

if(!$(this).val().match(upperCase) && !$(this).val().match(lowerCase) && !$(this).val().match(numbers))    
{
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters. It must contain a mixture of upper and lower case letters, and at least one number or symbol.");
}
else
{
    $("#passwordErrorMsg").html("OK")
}
4

2 に答える 2

21

すべての正規表現は、指定した範囲以外を検索しています。したがって、[^AZ] は AZ 以外を検索します。

また、各試合を否定しています。

^ を削除して正規表現の定義を変更し、ロジックを逆にしてみてください。そう、

var upperCase= new RegExp('[A-Z]');
var lowerCase= new RegExp('[a-z]');
var numbers = new RegExp('[0-9]');

if($(this).val().match(upperCase) && $(this).val().match(lowerCase) &&   $(this).val().match(numbers))  
{
    $("#passwordErrorMsg").html("OK")

}
else
{
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters.     It must contain a mixture of upper and lower case letters, and at least one number or symbol.");
}

これは、読むのがもう少し直感的かもしれませんか?

于 2012-10-06T21:28:50.397 に答える
0
var upperCase= new RegExp('[A-Z]');
var lowerCase= new RegExp('[a-z]');
var numbers = new RegExp('[0-9]');

if($(this).val().match(upperCase) && $(this).val().match(lowerCase) &&   $(this).val().match(numbers) && $(this).val().lenght>=6 && $(this).val()<=20)  
{
    $("#passwordErrorMsg").html("OK")

}
else
{
    $("#passwordErrorMsg").html("Your password must be between 6 and 20 characters.     It must contain a mixture of upper and lower case letters, and at least one number or symbol.");
}
于 2013-02-06T13:17:32.717 に答える