3

私はJavascriptの正規表現にかなり慣れていないので、単純に思えることをしようとして失敗しています。基本的に、文字列が 2 つの正規表現条件のうちの 1 つを満たすかどうかを評価する必要があります。基本的に、入力文字列は 2 つの形式のうちの 1 つを持つことができ、それらのいずれかが有効で、それ以外は無効です。

つまり、次の 2 つの正規表現があるa= ^[0-9]\d{3}$b= ^1-\d{5}します。入力文字列が次のいずれかに一致するかどうかを確認してから続行します。私がやりたいことは次のようなものです:

If((!a.test(input)) || (!b.test(input)))
{
   alert("Invalid ID");
}

「|」を使用したバリエーションも試しました オペレーター:

if((!a|!b.test(input)))

しかし、これまでのところ何も機能していません。通常、ステートメントはいずれか 1 つを検証するか、いずれも検証しませんが、両方を検証することはありません。ここで何が間違っているのかわかりません。

ありがとうございました!

4

2 に答える 2

7

あなたのブール論理は間違っていると思います。続行する前にどちらか一方を一致させるには、次のように両方のテストが一致しない場合に失敗します。

if(!a.test(input) && !b.test(input))
{
   alert("Invalid ID");
}

また、小文字を使用するIf必要があります。読みやすくするために、不要なレベルの括弧を削除しました。ifi

両方の正規表現を 1 つに結合して、一度にテストすることもできます。

var re = /^[0-9]\d{3}$|^1-\d{5}/;

if (!re.test(input)) {
    alert("Invalid ID");
}

また、実際のコードは表示されませんが、正規表現は質問でどのように表現されているかは宣言されていません。おそらく、これは質問にコピーした方法ですが、次のような/regex here/構文を使用します。

var a = /^[0-9]\d{3}$/;
var b = /^1-\d{5}/;

注: 2 番目の正規表現では、最初の正規表現のように最後に a を付けるつもり$ですか?

于 2012-08-28T21:24:41.907 に答える
0

私は次のようにします:

if (!input.match(/^(\d{4}|1-\d{5})$/)) {
    alert('Invalid ID');
}

同じである の\d代わりに使用したことに注意してください。[0-9]

于 2012-08-28T21:29:11.403 に答える