我想在 JavaScript 中验证用户名或密码只接受带有正则表达式的 3 个数字。
我有以下内容,问题是当1234
我输入它时接受它是正确的,我需要验证它才能执行我的页面的其余部分。
function validar() {
usuario = document.getElementById('usuario').value;
patron = /\d{3}/;
if(patron.test(usuario)){
alert("correcto")
}else{
alert("ERROR")
}
让我们按部分进行,从简单到复杂,最终简化一切。
1.只有3位数
如果只是看它是否有 3 位数字,为什么要使用正则表达式?这是一个介于 100 和 999 之间的数字,对吧?
2.末尾3位
但是如果用户是一个以 3 位数字结尾的名字,那么我们必须保证正则表达式从
^
文本的开头 ( ) 到结尾( ) 匹配$
。回想一下,正则表达式匹配文本的任何部分(它找到的第一个部分)。这就是您的代码失败的原因,因为它与文本所具有的 4 位中的前 3 位数字匹配。
因此,我们强制匹配文本的起始位置、任意数量的非数字字符、所有 3 位数字和结束位置。
\D
匹配 1 个字符,任何不是数字的字符(它与 ; 相同,[^0-9]
并且*
在 0 和无限次之间重复。3.正则表达式在任何位置正好3位数
现在,如果它们可以在任何地方,您必须允许
\D*
彼此之间存在,例如/^\D*\d\D*\d\D*\d\D*$/
.但它可以变得更简单,通过使用一个组
(?:
......)
并重复该组:4.删除所有不是数字的东西
但也许,消除所有内容会更容易,只留下数字并使用与第一点相同的内容:
您的表达式的问题在于,如果您编写的文本连续包含 3 个数字,它将返回 true,因为这就是您的表达式的意思。
您必须指出从字符串的开头到结尾,它只包含 3 个
^
在开头和$
结尾使用的数字:^
表示在字符串的开头和$
结尾处搜索。