いくつかの簡単な正規表現を使用すると、顧客が注文フォームに有効なクレジットカード番号を入力したかどうかを簡単に確認できます。 あなたも、使用されているクレジットカードの種類を決定することができます。 各カード発行会社は、最初の4桁で識別されるカード番号の独自の範囲を持っています。
少し異なる正規表現を使用して、大きなドキュメント内でクレジットカード番号、またはクレジットカード番号である可能性のある番号シーケンスを検 これは、セキュリティ監査で、クライアントの財務情報を不適切に公開していないことを証明するのに非常に便利です。
注文フォームから始めます。
スペースとダッシュの除去
最初のステップは、顧客が入力したカード番号から数字以外のすべてを削除することです。 物理的なクレジットカードは、数字をグループ化するためのカード番号内のスペースを持っている、それが簡単に人間が読んだり、入力することがで だから、あなたの注文フォームは、それらの中にスペースやダッシュとカード番号を受け入れる必要があります。
カード番号から数字以外のすべてを削除するには、スクリプト言語の”すべて置換”関数を使用して正規表現+を検索し、何も置き換えません。 スペースとダッシュのみを置き換えたい場合は、+を使用できます。 この正規表現が奇妙に見える場合、文字クラスでは、ハイフンが閉じ括弧の直前(または開始括弧または否定キャレットの直後)にある場合、ハイフンは
あなたはプラスが何のためにあるのか疑問に思っているなら:それはパフォーマンスのためです。 入力に1===2のような連続した非数字がある場合、+は3つの等号を一度に一致させ、1つの置換でそれらを削除します。 プラスがなければ、3つの交換が必要になります。 この場合、節約はわずか数マイクロ秒です。 しかし、正規表現の効率をあなたの心の奥に保つのは良い習慣です。 節約はここでは最小限ですが、余分なプラスを入力する努力もそうです。
注文フォームでのクレジットカード番号の検証
クレジットカード番号の検証は、正規表現にとって理想的な仕事です。 彼らはちょうど13から16桁のシーケンスで、カード発行者を識別するいくつかの特定の数字が先頭にあります。 以下の特定の正規表現を使用して、受け入れられない種類のカードを使用しようとしたときに顧客に警告したり、異なるカードを使用して注文を異なる これらの正規表現はすべてRegexBuddyのライブラリから取得されました。
- :5{2}|222|22|2{2}|27|2720){12}$ マスターカードの番号は、番号51から55または番号2221から2720のいずれかで始まります。 すべて16桁の数字を持っています。
- American Express:^3{13}American American Expressカード番号は34または37で始まり、15桁です。
- ダイナースクラブ:^3(?:0|){11}Dinダイナースクラブカード番号は300から305、36または38で始まります。 すべて14桁の数字を持っています。 ダイナースクラブカードは5で始まり、16桁の数字があります。 これらはDiners ClubとMasterCardの合弁会社であり、MasterCardのように処理する必要があります。
- 発見:^6(?:011/5{2}){12}$ 発見カード番号は6011または65で始まります。 すべて16桁の数字を持っています。
- :2131/1800/35\d{3})\d{11}2 2131または1800で始まるJCBカードには15桁の数字があります。 35から始まるJCBカードには16桁の数字があります。
カード番号が有効かどうかを確認したいだけの場合は、ブランドを決定せずに、交替を使用して上記の6つの正規表現を組み合わせることができます。 非キャプチャグループは、交互の外側にアンカーを置きます。 Free-spacingを使用すると、コメントと正規表現がこのページの幅に収まるようになります。
^(?:4{12}(?:{3})? #ビザ
|(?:5{2}###########
| 222/22/2{2}|27|2720){12}
| 3{13} # アメリカン-エキスプレス
/3(?:0|){11}#ダイナースクラブ
/6(?:011/5{2}){12} # 発見
|(?:2131/1800/35\d{3})\d{11}#JCB
)$
これらの正規表現は、顧客が入力した数字が多すぎたり少なすぎたりするため、無効な数字を簡単にキャッチします。 彼らは間違った数字の数字をキャッチしません。 そのためには、正規表現では実行できないLuhnアルゴリズムに従う必要があります。 もちろん、数字が数学的に有効であっても、それはこの番号のカードが発行されたことや口座にお金があることを意味するものではありません。 利点や正規表現は、あなたが即座に明白なエラーをチェックするためにJavaScriptのビットにそれを置くことができるということです,代わりに、顧客が注文 そして、あなたのカードプロセッサが失敗した取引のために請求するならば、あなたは本当に正規表現とLuhn検証の両方を実装したいと思うでしょう。
ドキュメント内のクレジットカード番号の検索
二つの簡単な変更を使用すると、より大きなドキュメント内のカード番号を検索するために、上記の正規表現のいずれかを使用することができます。 単にキャレットとドルを\b4{12}(?)のように単語の境界に置き換えます。:{3})?\b.
大規模なドキュメントサーバーを検索する場合は、より単純な正規表現を使用すると検索が高速化されます。 あなたの会社が他の目的のために16桁の数字を使用しない限り、偽陽性はほとんどありません。 正規表現\b\d{13,16}\bは、13桁から16桁の任意のシーケンスを検索します。
ファイルでいっぱいのハードディスクを検索するとき、単一のカード番号を検証するときのように、最初にスペースとダッシュを取り除くことはできません。 スペースまたはダッシュを含むカード番号を検索するには、\b(?:\d*?){13,16}\b.この正規表現は、数字の任意の場所に任意の量のスペースとダッシュを許可します。 これは本当に唯一の方法です。 VisaとMasterCardは4桁の数字を入れ、AmexとDiscoverは4桁、5桁、6桁のグループを使用します。 数字を入力する人々はまだ異なるアイデアを持っているかもしれません。
寄付をする
このウェブサイトはちょうどあなたに書店への旅行を保存しましたか? このサイトをサポートするために寄付をしてください、あなたはこのサイトへの広告無料アクセスの寿命を得るでしょう!