があなたの正規表現(demo)だことだろうと述べ1:回答
^6(?:011\d{12}|5\d{14}|4[4-9]\d{13}|22(?:1(?:2[6-9]|[3-9]\d)|[2-8]\d{2}|9(?:[01]\d|2[0-5]))\d{10})$
言うまでもなく、私はまさにこれはかなりか簡単呼び出しません維持する。数値を整数として解析し、プログラミング言語を使ってチェックを行うことをお勧めします。あなたはは、理論的には、正規表現でこれを行うことができながら、
ます。また、クレジットカード番号が有効であるかどうかを確認するためにLuhn algorithmを使用し、必要があり、それはこれより多くの時間が悪化します。
私は、この怪物にどのようにして到着したかを段階的に示してもらうことができます。まず、ここにあなたがそれらの範囲のそれぞれに合致する方法である:
今
6011 # matches 6011
65 # matches 65
64[4-9] # matches 644-649
622(1(2[6-9]|[3-9]\d)|[2-8]\d{2}|9([01]\d|2[0-5]))
# matches 622126-622925
、あなたは数字の残りの部分を合わせたい:
6011\d{12} # matches 6011 + 12 digits
65\d{14} # matches 65 + 14 digits
64[4-9]\d{13} # matches 644-649 + 13 digits
622(1(2[6-9]|[3-9]\d)|[2-8]\d{2}|9([01]\d|2[0-5]))\d{10}
# matches 622126-622925 + 10 digits
今、あなたはすべての4つを組み合わせて、開始と終了を追加することができます行のアンカー:
^( # match start of string and open group
6011\d{12}| # matches 6011 + 12 digits
65\d{14}| # matches 65 + 14 digits
64[4-9]\d{13}| # matches 644-649 + 13 digits
622(1(2[6-9]|[3-9]\d)|[2-8]\d{2}|9([01]\d|2[0-5]))\d{10}
# matches 622126-622925 + 10 digits
)$ # close group and match end of string
上記最終生成物は、前の正規表現のわずかに圧縮されたバージョンであり、Iはまた、(すなわち、それら?:
をするためのもので何)基、非捕捉ました。
通常のDiscover Regexを使用して、次の行でより読みやすい方法でチェックを実行できますか? –
正規表現以外の数値比較を使用するだけの理由はありませんか? – djechlin
@YuriyFaktorovich申し訳ありませんがあなたを取得していません。あなたは上記の質問を書式化するか、2つのステップでそれに取り組むことを意味しますか?後者の場合、私はそれのための単一の正規表現を好むでしょう。 – Ashfame