1

私はこのHTMLフィールドを持っています:

<input type="text" name="userInput" id="userInput">

ユーザーが少なくとも5文字を入力するか、何も入力しないようにしたい。

このコードは、最小5文字のみをテストしますが、正常に機能しています。

userInputValue = $("#userInput").val();
if (/^([A-Za-z]{5,})/.test(userInputValue) === false) {
    alert("More than five, please!");
    return false;
}

ただし、このようにフィールドが空白の場合にこのチェックをスキップする条件を追加しようとすると、

userInputValue = $("#userInput").val();
if (userInputValue !== "") {
    if (/^([A-Za-z]{5,})/.test(userInputValue) === false) {
        alert("Either more than five or none at all, please!");
        return false;
    }
}

またはこのように

userInputValue = $("#userInput").val();
if (/^([A-Za-z]{5,})/.test(userInputValue) === false && userInputValue !== "") {
    alert("Either more than five or none at all, please!");
    return false;
}

チェックは完全に失敗し、すべてが通過します。私は何を間違っているのですか、そしてそれをどのように機能させるのですか?デバッガーから情報を取得していません。

4

1 に答える 1

1

少し変更して、?適切な場所を追加しました。

userInputValue = $("#userInput").val();
if (userInputValue !== "") {
    if (/^([A-Za-z]{5,})?$/.test(userInputValue) === false) {
        alert("Either more than five or none at all, please!");
        return false;
    }
}

正規表現の外植

"^" +              // Assert position at the beginning of a line (at beginning of the string or after a line break character)
"(" +              // Match the regular expression below and capture its match into backreference number 1
   "[A-Za-z]" +       // Match a single character present in the list below
                         // A character in the range between “A” and “Z”
                         // A character in the range between “a” and “z”
      "{5,}" +           // Between 5 and unlimited times, as many times as possible, giving back as needed (greedy)
")?" +             // Between zero and one times, as many times as possible, giving back as needed (greedy)
"$"                // Assert position at the end of a line (at the end of the string or before a line break character)

お役に立てれば

于 2012-05-26T12:21:55.167 に答える