2016-04-06 6 views
1

私はさまざまなタイプのクレジットカードの異なる番号体系を検討しています。
発見:\b6(?:011|5[0-9]{2})[0-9]{12}\b
VISA:\b4[0-9]{12}(?:[0-9]{3})\b
ダイナースクラブ:たとえば
\b3(?:0[0-5]|[68][0-9])[0-9]{11} \b正規表現のディジットのサブグループ間の ' - 'またはスペースが間違っているのはなぜですか?

一部の人々は入れたい「 - 」桁のサブグループの間にスペースまたはクレジットカード番号を書き込むとき、および上記のREそれらを捕らえることはできません。
例:(?:\d[ -]*?){13,16}\b

どうしてですか?

+2

これらの正規表現は、スペースやハイフンとの一致を試みないため、スペースやハイフンと一致しません。スペースやハイフンにマッチするように書き直す方法を尋ねていますか? –

+0

はい、スペースとハイフンをどのように一致させるかを知りたいと思います。 –

答えて

0

サブグループ間のスペース/ハイフンを明示的に尋ねてください。あなたは元のregexesでそれらを言及していません。簡潔にするため

6(?:011|5[0-9]{2})[0-9]{12} 

私が残してきた\b:たとえば、ディスカバーパターンのために、あなたはこれを与えました。私は何かが欠けていない限り、あなたは[0-9]の代わりに\dを使用することができます。

6(?:011|5\d{2})\d{12} 

スプリットに後者の12桁の数字を4分の3グループに分け:

6(?:011|5\d{2})\d{4}\d{4}\d{4} 

その後にスペースを入れる/ハイフンの間:

6(?:011|5\d{2})[ -]*\d{4}[ -]*\d{4}[ -]*\d{4} 

このように重複なく表現することができます。

6(?:011|5\d{2})(?:[ -]*\d{4}){3} 

他の戦略にも同様の戦略を適用できます。

関連する問題