我使用以下正则表达式来验证各种信用卡类型的信用卡号:
/^((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"/>
请尝试输入签证测试卡号,最后输入一些字符。
对此有任何帮助表示赞赏。
答案 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中并不重要)将确保开始和结束锚点将应用于整个正则表达式模式。