正規表現はあまり得意ではありません。入力された文字列が有効な米国、英国、またはCAの郵便番号である場合にtrue/falseを返す検証関数を追加しようとしています。
米国:NNNNN CA:LNL NLN英国:多くの組み合わせ
L =文字、N=数字
米国とカナダには個別の機能がありますが、これを行うための単一の統合機能を思い付くことができませんでした。
正規表現はあまり得意ではありません。入力された文字列が有効な米国、英国、またはCAの郵便番号である場合にtrue/falseを返す検証関数を追加しようとしています。
米国:NNNNN CA:LNL NLN英国:多くの組み合わせ
L =文字、N=数字
米国とカナダには個別の機能がありますが、これを行うための単一の統合機能を思い付くことができませんでした。
Zend FrameworkZend_Validate_Postcode
から見てみましょう:
Zend_Validate_PostCodeを使用すると、指定された値が有効な郵便番号であるかどうかを判断できます。郵便番号は都市に固有であり、一部のロケールでは郵便番号と呼ばれます。
Zend_Validate_PostCodeは、160を超えるさまざまな郵便番号形式を認識しています。正しいフォーマットを選択するには、2つの方法があります。完全修飾ロケールを使用することも、独自の形式を手動で設定することもできます。
ソースを確認するか、スタンドアロンコンポーネントとして使用できると思います。ZF内に依存関係がある場合がありますが、そのコンポーネントのためだけにフレームワーク全体を使用する必要はありません。お役に立てば幸いです。
OR
私の解決策は、論理演算子を使用して3つの別々の正規表現を取得することです。
if (
preg_match('/^\d{5}(?:\-\d{4})?$/i', $code, $matches) OR
preg_match('/^[a-z]\d[a-z] ?\d[a-z]\d$/i', $code, $matches) OR
preg_match('/^[a-z]{1,2}\d{1,2} ?\d[a-z]{2}$/i', $code, $matches)
) {
// deal with $matches here
}
PHPは短絡ロジックを使用するため、これが機能することに注意してください。1つのテストに合格すると、他のテストは無視されるため、$matches
オーバーライドされません。