1

私はそれが単純だと確信しています、そして私はそれを見ません。私は例を探してきましたが、それらは短くて単純ですが、私の問題を見つけることができないようです.

郵便番号フィールドを検証し、カナダの郵便番号形式を使用したいと考えています。使用したい式が見つかりました。次のようになります。

var validZIP={
   "US":"^\d{5}([\-]?\d{4})?$",
   "UK":"^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$",
   "CA":"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$"
}

CAこの場合、カナダを表す に注意してください。

私のonChange関数は次のメソッドを呼び出します (入力からの onchange クラスcheckValidPostal(this)):

function checkValidPostal(input)
{
    var re =  new RegExp(validZIP["CA"]);
    var value = input.value.toUpperCase();  
    if (value.match(re))
    {
        input.value = value;
        return true;    
    }
    input.value = "";
    return false;
}

次を使用して正規表現の行を確認しました。

http://www.regular-expressions.info/javascriptexample.htmlそして、そのページではうまく機能しますが、何らかの理由で私のページでは機能しません!

助けてください。

4

3 に答える 3

4

問題があります。正規表現リテラルの代わりに文字列を使用すると、エスケープメントが不足します。

さらに、おそらくmatch の代わりにtestを使用したいと思うでしょう。

次のように修正できます。

var validZIP={
   "US": /^\d{5}([\-]?\d{4})?$/,
   "UK": /^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/,
   "CA": /^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/
}

function checkValidPostal(input) {
    var re =  validZIP["CA"];
    var value = input.value.toUpperCase();  
    if (re.test(value)) {
        input.value = value;
        return true;    
    }
    input.value = "";
    return false;
}
于 2013-03-20T18:16:24.617 に答える
2

文字列内では、バックスラッシュを二重にエスケープする必要があります。そうしないと、文字列によって既にエスケープされており、RegEx コンストラクターが文字列を取得するまでにバックスラッシュが残っていません。

于 2013-03-20T18:15:41.207 に答える
0

有効なZIPに文字列の代わりにパターンを入れてみてください:

var validZIP={
   "US":/^\d{5}([\-]?\d{4})?$/,
   "UK":/^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/,
   "CA":/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/
}
于 2013-03-20T18:18:10.963 に答える