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

Credit card regex not working in AngularJs

本文关键字:不起作用 AngularJs 正则表达式 信用卡      更新时间:2023-09-26

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

/^((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一起使用,它就不会按预期进行验证。基本上,它也允许输入字符,即使regex不允许这样做。

样品: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"/>

请尝试在末尾输入带有一些字符的Visa测试卡号。

感谢您在这方面的任何帮助。

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

^(?:(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演示

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

添加外部组(可以是捕获或非捕获,在AngularJS中这无关紧要)将确保开始和结束锚点将应用于整个regex模式。