1

文字列を受け取り、それに郵便番号の有効なリストが含まれていることを確認する関数があります。

function ValidateZipCodeString(listOfZipCodes) {
    // Only 5-digit zip codes are allowed
    //  Zip codes can be separated by a comma, a space, or both
    //  Any other characters will cause the error label to display
    var regex = /^\d{5}(\s*,\s*\d{5})*$/;
    return regex.test(listOfZipCodes);
}

郵便番号の「有効な」文字列は次のようになります。

12345,67854
OR
12345 35647, 09873

BUT NOT

1234565
OR
asd45, 12346

文字列に問題がないことを検証する限り、これはそのままで正常に機能します。私が今それをする必要があるのは、コンマかスペースだけがあり、コンマとスペースの両方があるところです。したがって、上記の例を使用すると、

12345, 67854
OR
12345, 35647, 09873

どうやってやるの?

【明確化情報】

既存の機能に変更を加える限り、自分の意図を明確にする必要があります。私が言ったように、それはうまく機能し、警告ラベルを表示するかどうかを呼び出し元の関数に伝えるためにブール値を返す関数が必要です。

ValidateZipCodeString関数の機能に追加して、有効な郵便番号のリストが文字列に含まれている場合に、その文字列を変更して(コンマ文字列が各5桁の郵便番号の間にあることを確認してください)、次のように記述する必要があります。郵便番号の文字列が由来するテキストボックスへのその文字列。

4

3 に答える 3

0

\ s *の代わりに、コマと空白の文字クラスを使用できます

var regex = /^\d{5}([\s,]*\d{5})*$/;
于 2013-02-28T21:57:46.857 に答える
0

私はするだろう:

function ValidateZipCodeString(listOfZipCodes) {
    // Only 5-digit zip codes are allowed
    //  Zip codes can be separated by a comma, a space, or both
    //  Any other characters will cause the error label to display
    var regex = /^\d{5}(?:[\s,]+\d{5})*$/;
    see the change here __^^^^^^
    return regex.test(listOfZipCodes);
}

正規表現の説明:

The regular expression:

(?-imsx:^\d{5}(?:[\s,]+\d{5})*$)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  \d{5}                    digits (0-9) (5 times)
----------------------------------------------------------------------
  (?:                      group, but do not capture (0 or more times
                           (matching the most amount possible)):
----------------------------------------------------------------------
    [\s,]+                   any character of: whitespace (\n, \r,
                             \t, \f, and " "), ',' (1 or more times
                             (matching the most amount possible))
----------------------------------------------------------------------
    \d{5}                    digits (0-9) (5 times)
----------------------------------------------------------------------
  )*                       end of grouping
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
于 2013-03-02T10:26:03.393 に答える
0

私は2つの関数でそれを行います:

s="12345,ad7854"
t="12345 35647, 09873"
function ReformatZipCodeArray(arrayOfZipCodes) {
    // Only 5-digit zip codes are allowed
    //  Zip codes can be separated by a comma, a space, or both
    //  Any other characters will cause the error label to display
    if (arrayOfZipCodes == null) {
        return null;
    }
    var regex = /^\d{5}$/;
    var areZipsInArrayValid = true;
    var invalidZips = [];
    arrayOfZipCodes.map(function(possibleZipCode) {
        if (regex.test(possibleZipCode) == false) {
            areZipsInArrayValid = false;
            invalidZips.push(possibleZipCode);
        }
    });
    if (areZipsInArrayValid) {
        return arrayOfZipCodes.join(", ");
    } else {
        console.log("ERROR: invalid zips are ", invalidZips);
        return null;
    }
}

function split(listOfZipCodes) {
    // Split by either a space or a comma or any combination of those
    if (listOfZipCodes.trim().length == 0) {
        return null;
    }
    var regex = /[\s,]+/;
    return listOfZipCodes.split(regex);
}

console.log(ReformatZipCodeArray(split(s)))

上記のコードの出力は次のようになります。

ERROR: invalid zips are  ["ad7854"]

zip の有効な文字列 ("12345 35647, 09873") の出力は次のようになります。

12345, 35647, 09873
于 2013-02-28T22:58:52.163 に答える