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

标签 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"/>

尝试输入 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/

相关文章:

javascript - 如何创建一个搜索栏,用于下拉 SQL 数据库中的元素列表

angularjs - 为angularjs中的评论创建十进制星级

javascript - 如何使用正则表达式提取 JavaScript 变量

regex - 如何在没有积极前瞻的情况下重写正则表达式?

javascript - 向 impress.js 添加事件监听器

javascript - 错误 : [$compile:multidir] Multiple directives [mdVirtualRepeat, ngInclude] 要求嵌入

javascript - Jquery表单提交没有被触发

javascript - 如何访问父 Controller 中指令的对象?

javascript - 如何在范围外更改 AngularJS 数据?

regex - 用于验证手机号码的 Flutter 正则表达式