Javascript 信用卡信息的正则表达式不应允许使用字符

Javascript 信用卡信息的正则表达式不应允许使用字符,javascript,regex,Javascript,Regex,我正在使用正则表达式^4[0-9]{15}$检查信用卡信息,该信息以VISA卡的4开头,长度为16位 此表达式接受信用卡号,如41aa,这是错误的,因为它接受有效信用卡号末尾的字母字符 如何修复此问题?如果您使用的是Java,则锚点不是^和$,而是\A和\z,因此您的正则表达式是 "\\A4[0-9]{15}\\z" 或 在Javascript中,锚点实际上应该是^和$生成正则表达式: /^4\d{15}$/ 在我的Firebug Javascript控制台中测试: >>>

我正在使用正则表达式
^4[0-9]{15}$
检查信用卡信息,该信息以VISA卡的
4
开头,长度为16位

此表达式接受信用卡号,如
41aa
,这是错误的,因为它接受有效信用卡号末尾的字母字符


如何修复此问题?

如果您使用的是Java,则锚点不是
^
$
,而是
\A
\z
,因此您的正则表达式是

"\\A4[0-9]{15}\\z"


在Javascript中,锚点实际上应该是
^
$
生成正则表达式:

/^4\d{15}$/
在我的Firebug Javascript控制台中测试:

>>> var val1='4141414141414141';
>>> var val2='4141414141414141aa';
>>> /^4\d{15}$/.test(val1);
true
>>> /^4\d{15}$/.test(val2);
false

您可以使用
\b
在JavaScript中匹配单词的开头和结尾。因此,它可以是:

if (/\b4\d{12}(?:\d{3})?\b/.test(subject)) {
    // Successful match

} else {
    // No match

}

根据

的说法,正则表达式本身看起来不错。你能说明你是如何在你的代码中使用它的吗?你所描述的是非常不可能的。您拥有的regex无论如何都不应该允许在总共16个数字之后有任何内容。使用哪种编程语言,或者什么regex包?我使用的是Javascript。。不知道为什么我能输入这些值。。。输入字段是否允许您输入非数字字符,或者带有非数字字符的值是否通过验证检查?谢谢您的回复。我使用Javascript检查正则表达式,html是用户输入数据的前端。既然你们都验证了这个表达式是正确的,我可能应该检查代码的其他部分是否有错误。非常感谢@user997509-也许您可以包含一些代码来精确显示您检查匹配的时间和方式。
if (/\b4\d{12}(?:\d{3})?\b/.test(subject)) {
    // Successful match

} else {
    // No match

}