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

Javascript 信用卡正则表达式在AngularJs中不起作用,javascript,angularjs,regex,validation,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}))(?您需要将所有内容放入一个组: ^(?:(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}))$ ^^^

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


/^((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}))(?您需要将所有内容放入一个组:

^(?:(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}))$
 ^^^                                                                                       ^

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

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

^(?:(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}))$
 ^^^                                                                                       ^