2016-02-22 60 views
0

我需要一個reg-EX與此規則JCB卡驗證,(Reference for JCB formatREG-防爆的JCB信用卡驗證

前四個數字必須是3088,3096,3112,3158,3337,或第一個 的八位數字必須在35280000到35899999的範圍內。有效的 長度:16位數字。

許多職位都找到了正則表達式^(?:2131|1800|35\d{3})\d{11}$post1post2post3

我建立使用Authorize.Net.But的Authorize.Net測試JCB信用卡驗證信用卡支付模塊發生故障的上述正則表達式(^(?:2131 ...)。

但也有JCB 。卡一樣3088000000000017 (Authorize.Net test card),3096022966045455,3088810779293696

幫助我的正則表達式我找不到與2131或1800的任何JCB卡,我失去的東西

+0

我強烈建議不要使用正則表達式進行此類驗證。您應該將輸入解析爲數字並處理它。匹配數字範圍的正則表達式非常不透明且不直觀,總之是一場維護噩夢。 – Vikhram

+0

@Vikhram:我強烈反對。當一串數字(或任何字符)的格式有嚴格的規則,並且這些規則不會經常發生變化時,正則表達式可以在識別有效字符串時非常有用。當然,如果信用卡號碼和其他數字字符串攜帶錯誤檢測,還應驗證校驗位以確保該數字實際上是有效的數字,但如果只檢查那些格式不正確的數字,則可節省時間。 – xjuice

回答

1

給出的規則,我會用這個表達式:

^(3(?:088|096|112|158|337|5(?:2[89]|[3-8][0-9]))\d{12})$

擊穿:

  • ^(3...)$:錨的開始和結束,並捕獲內容與數字3

  • (?:...)開始:不要抓取內容明確(外括號內捕獲)

  • 088|...|337|...:匹配任何三位數值

  • 5(?:...):第一匹配5 然後

  • 2[89]|[3-8][0-9]:匹配或者2後跟8或9,或從3至8的任何數字,隨後通過任何數字(0到9)

  • \d{12}:其次正好12任何數字(\ d是相同的[0-9])

編輯:關於以2131和1800開頭的數字的問題,它會在第三個參考頁面中讀取那些JCB卡號碼是15位數字,而以35開頭的是16位數字。如果您的規格僅指16位數的長號碼,那麼您可能不需要匹配那些較短的號碼。