我使用以下正则表达式来验证各种信用卡类型的信用卡号:
/^((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"/>
尝试输入 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 demo
出现问题的原因是 ^
和 $
anchor 仅分别应用于第一个和最后一个替代方案。
添加外部组(可以是捕获或非捕获,在 AngularJS 中这并不重要)将确保开始和结束 anchor 将应用于整个正则表达式模式。
关于javascript - 信用卡正则表达式在 AngularJs 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509991/