8

ユーザーが6桁、またはペアの間にハイフンを付けて6桁を入力できるように、英国の銀行の並べ替えコードのJavaScriptで正規表現を作成しようとしています。たとえば、「123456」または「12-34-56」。また、すべての数字が0になるわけではありません。これまでのところ/(?!0{2}(-?0{2}){2})(\d{2}(-\d{2}){2})|(\d{6})/、このjsFiddleをテストする必要があります。

これは私の最初の正規表現なので、正しく実行されているかどうかはわかりません。-?6 0桁のテストは失敗するはずであり、先読みのオプションのハイフンを使用すると、6 0桁のハイフンと同じように扱われると思いましたが、そうではありません。私がそれを完全に間違ってやっているなら、私はいくつかの助けと批判をいただければ幸いです!

4

2 に答える 2

11

質問に答えるために、次の方法でユーザー入力を検証できます。

/^(?!(?:0{6}|00-00-00))(?:\d{6}|\d\d-\d\d-\d\d)$/.test(inputString)

XX-XX-XXフォームまたは数字XXXXXXの入力のみに厳密に一致し、他の場合(または)とともに、を除外します。X 00-00-00000000XX-XXXXXXXX-XX

ただし、私の意見では、他のコメントで述べられているように、ユーザーに常にハイフンを入力するか、まったく入力しないように強制した方がよいと思います。お金に関連するものを扱うときに特に厳格にすることで、後で(不明な)トラブルを回避できます。

于 2012-07-05T10:17:32.357 に答える
4

数字のいずれかがゼロになる可能性がありますが、一度にすべてではないため、すべてがゼロである1つのケースを単一の特殊なケースとして扱う必要があります。

\d{2}2桁の数字( )、次にオプションのハイフン(-?)、次に別の2桁のハイフン()、さらに別の2桁のハイフン()をチェックしてい\d{2}ます。-?\d{2}

これをまとめるとが得られ\d{2}-?\d{2}-?\d{2}ますが、これをさらに単純化することができます。

(\d{2}-?){2}\d{2}

次に、次の擬似コードを使用して形式を一致させますが、000000または00-00-00:を一致させません。

if (string.match("/(\d{2}-?){2}\d{2}/") && !string.match("/(00-?){2}00/"))
     //then it's a valid code, you could also use (0{2}-?){2}0{2} to check zeros

文字列全体をチェックするために、文字列アンカー^(開始)と(終了)を追加することをお勧めします。$

于 2012-07-05T10:12:19.737 に答える