信用卡正则表达式在AngularJs中不起作用

时间:2015-11-03 22:06:30

标签: javascript angularjs regex validation

我使用以下正则表达式来验证各种信用卡类型的信用卡号:

/^((5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11}))(?<=\d)$/

使用regex101.com等在线验证程序可以正常工作,但是当我尝试将它与ngPattern一起使用时,它不会按预期验证。基本上,它允许输入字符,即使正则表达式不允许这样做。

样品: http://plnkr.co/edit/r6qGoyfKHnzoOQmv0kpv

<input type="text" name='cc' ng-model="usd" ng-pattern="/^(5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11})$/" 
   placeholder="credit card number"/>

请尝试输入签证测试卡号,最后输入一些字符。

对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您需要将所有内容放入一个组中:

^(?:(5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11}))$
 ^^^                                                                                       ^

请参阅regex demo

出现问题是因为^$仅分别应用于第一个和最后一个备选

添加外部组(它可以是捕获或非捕获,在AngularJS中并不重要)将确保开始和结束锚点将应用于整个正则表达式模式。