2011-06-07 58 views
1

是否有人在Symfony 1.4中使用可用的信用卡號碼驗證器?Symfony 1.4的信用卡驗證器

我經由http://brentertainment.com/2009/09/01/some-helpful-symfony-form-validators/發現https://gist.github.com/181049但至少開關正則表達式模式似乎確實破裂,可能JCB /途中爲好。

我認爲問題在於它使用方括號而不是括號來試圖匹配前綴,但如果這樣做被破壞了,那麼它會導致我懷疑驗證程序的其餘部分。

/^[4903|4911|4936|5641|6333|6759|6334|6767]\d{12}$/ 

應該

/^(4903|4911|4936|5641|6333|6759|6334|6767)\d{12}$/ 

沒有人有工作,測試驗證他們在生產中使用?最好用英國卡?

回答

1

我會遠離美國正則表達式,該示例省略了許多有效前綴:Visa DR的40 *,Visa/Electron的48 *,單獨的35 *。

對於大多數方案,長度也可以跨越16-19位,所以長度約束不正確。

BIN前綴(第1 6)定期修改(範圍增加/退休/免除電子通信),並在較小的程度上也是如此第1 4,所以你可能要依靠第一位數字而是用LUHN檢查代替&。

如果你在英國; http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

0

使用RegexBuddy圖書館提出以下建議:

^(?:4\d{3}[ -]*\d{4}[ -]*\d{4}[ -]*\d(?:\d{3})?|5[1-5]\d{2}[ -]*\d{4}[ -]*\d{4}[ -]*\d{4}|6(?:011|5[0-9]{2})[ -]*\d{4}[ -]*\d{4}[ -]*\d{4}|3[47]\d{2}[ -]*\d{6}[ -]*\d{5}|3(?:0[0-5]|[68][0-9])\d[ -]*\d{6}[ -]*\d{4}|(?:2131|1800)[ -]*\d{6}[ -]*\d{5}|35\d{2}[ -]*\d{4}[ -]*\d{4}[ -]*\d{4})$ 

以上會匹配所有的信用卡,如下面的例子:

Visa 
4123456789
4123 4567 8901 2345 
4123-4567-8901-2345 

MasterCard 
5123456789
5123-4567-8901-2345 
5123 4567 8901 2345 

Discover 
6011123456789012 
6011-1234-5678-9012 
6011 1234 5678 9012 

American Express 
34123456789
3412 345678 9
3412-345678-9

Diner's Club 
30
3001 234567 8901 
3001-234567-8901 

JCB 
213112345678901 
2131 123456 78901 
2131-123456-78901 
35123456789
3512 3456 7890 1234 
3512-3456-7890-1234