都市と州、または郵便番号のいずれかを許可する必要がある場所検索フィールドがあります。それぞれが別々に機能する 2 つの別々の正規表現パターンがありますが、それらを組み合わせる際に問題があります。
これは市と州用です。少なくとも 2 つの文字、次にコンマ、オプションの空白、さらに 2 つの文字があることを確認します。よく働く。
var str="abc, de";
var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;
if(patt1.test(str)) {
alert("true");
}
else {
alert("false");
}
これは郵便番号用です。正確に 5 つの数字があることを確認します。また、動作します。
var str="01235";
var patt1 = /[0-9]{5}/;
if(patt1.test(str)) {
alert("true");
}
else {
alert("false");
}
括弧とパイプ記号を使用して、代替の一致を実行できることを知っています。過去 2 回、(xxx) xxx-xxxx または xxx-xxx-xxxx の 2 つの異なる電話番号形式に対して検証を行いました。
var pattern = /((^\([0-9]{3}\) [0-9]{3}[-]{1}[0-9]{4}$)|(^[0-9]{3}-[0-9]{3}[-]{1}[0-9]{4}$))/;
しかし、市/州と郵便番号のチェックでこれを実行しようとすると、うまくいきません。郵便番号を入力すると、正しく true が返されますが、都市と州のパターンが単独で使用されたときに正しく true が返されたとしても、都市と州のすべての組み合わせが false を返します。そして、2 番目の可能性では正確に 5 つの数字の要件を無視しているようです。5 つ未満の場合は false を返しますが、5 つを超える場合は true を返します。これのどこが間違っているのでしょうか?
var patt1 = /((^[a-z]{2,},\s*[a-z]{2}$\i)|(^[0-9]{5}))/;
ここにフィドルがあります:http://jsfiddle.net/EmmyS/fHkZU/