カナダの郵便番号関数の効率的な正規表現 質問する

カナダの郵便番号関数の効率的な正規表現 質問する
var regex = /[A-Za-z]\d[A-Za-z] ?\d[A-Za-z]\d/;
var match = regex.exec(value);
if (match){
    if ( (value.indexOf("-") !== -1 || value.indexOf(" ") !== -1 ) && value.length() == 7 ) {
        return true;
    } else if ( (value.indexOf("-") == -1 || value.indexOf(" ") == -1 ) && value.length() == 6 ) {
        return true;
    }
} else {
        return false;
}

正規表現はパターン A0A 1B1 を検索します。true は次のようにテストされます。

A0A 1B1

A0A-1B1

A0A1B1

A0A1B1C << 問題児

そこで、「-」または「」のチェックを追加し、次に長さのチェックを追加しました。

正規表現、またはより効率的な方法はありますか?

ベストアンサー1

ユーザーの種類、郵便番号の厳密さ、最も効率的な形式:

/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i

許可:

  • h2t-1b8
  • 1b8 ...
  • H2Z1B8

禁止:

  • Z2T 1B8 (先頭のZ)
  • H2T 1O3(Oを含む)

先頭に Z、W を付けるか、D、F、I、O、Q、U を含める

おすすめ記事