1

これが取引です...

私は、カナダの郵便番号 (CapsLetterNumberCapsLetterNumberCapsLetterNumber: exemple A1B2C3 または G2V3V4) を解析することを想定しています。

私はこのコード(PHP)を持っています:

//Create new SESSION variable to store a warning
$_SESSION['msg'] = "";
//IF empty do nothing, IF NOT empty parse, IF NOT match regex put message in msg
if(!preg_match('^([A-Z][0-9][A-Z][0-9][A-Z][0-9])?$^', $_POST['txtPostalCode']) && $_POST['txtPostalCode'] != "")
{
    $_SESSION['msg'] .= "Warning invalide Postal Code";
}

次に、コードが表示されます$_SESSION['msg']

問題は、$_POST['txtPostalCode'] に何を入力しても、REGEX によって決して解析されないことです。

4

2 に答える 2

4

キャプチャ グループ全体をオプションにしました。

^([A-Z][0-9][A-Z][0-9][A-Z][0-9])?$^
                                 ^

また、正規表現のメタデータ文字を区切り文字として使用することもお勧めできません。大文字と数字を 3 回一致させる次の正規表現を試してください。

/^((?:[A-Z][0-9]){3})$/

&& $_POST['txtPostalCode'] != ""ユーザーがif ステートメントの一部でコードを送信しない場合のロジックを処理するため、キャプチャ グループをオプションにする必要はありません。

最後に、この正規表現からの一致も使用していないため、キャプチャ グループは必要ありません。

/^(?:[A-Z][0-9]){3}$/
于 2013-07-09T13:30:47.990 に答える
3

正規表現は無効な郵便番号に一致します。

「カナダの郵便番号の正規表現」をGoogleですばやく検索すると

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$

$_POST['txtPostalCode'] != ""そもそも値が空の場合、正規表現を実行しても意味がないため、条件を最初に配置することもできます。

編集:コメントで指摘されているように、量指定子は冗長です:

^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$
于 2013-07-09T13:32:44.087 に答える