2017-02-24 106 views
-2

我有這個正則表達式來驗證簽證和萬事達卡的空間,它的作品完美。正則表達Visa +萬事達卡需要添加美國運通卡

^(?:4\d{3}|5[1-5]\d{2}|6011|3[47]\d{2})([- ]?)\d{4}\1\d{4}\1\d{4}$ 

簽證

4111111111111111 =真

4111 1111 1111 1111 =真

5500000000000004 =真

5500 0000 0000 0004 =真

美國運通

340000000000009 =假

3400 0000 0000 009 =假

我需要添加美國運通於正則表達式,我需要的最後兩個是真的,任何人都可以幫助我嗎? 謝謝!

+0

難道說你在第一個簽證號碼一個錯字?我試過了,它也匹配了。請參閱:https://regex101.com/r/WhUwLC/1 – shove

回答

3

(假設4111111111111111 = false是一個錯字)

您可以使用以下正則表達式

^(?:4\d{3}|5[1-5]\d{2}|6011|3[47]\d{2})([-\s]?)\d{4}\1\d{4}\1\d{3,4}$ 

看到demo

+0

但是,您不能在第一組中添加'3 \ d {3} |'。由於ysanmiguel已經爲Amex卡添加了正確的情況,即'3 [47] \ d {2}'。 – shove

+0

啊..我的壞.. thnx的抓住:) – m87

+0

非常好,非常感謝你! – ysanmiguel

1

我不知道你如何使用這個表達式的背景但我會這樣做兩個步驟:

步驟1: 用一行代碼刪除所有空格。由於間距不應該定義一個數字是否有效/無效。

第2步: 使用這個表達式

^(?:4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13})$ 

這捕獲在萬事達卡幾個規則。

Source(Shortend表達,因爲需要較少的類型的卡)

Demo