我曾试图限制HTML文本框中用户只能插入4位数0-9的数字。
但是我尝试的方法只允许输入两位数。
<input type="text" name="pincode" maxlength="4" id="pin" pattern="^0[1-9]|[1-9]\d$" required/>
让我解释一下:任何一个^[0-9]{4}$
或^\d{4}$
都是用于限制值仅为4位数字的有效正则表达式。然而,pattern
HTML5属性的值默认已经被锚定:
用于此属性的正则表达式语言与JavaScript中使用的相同,但pattern属性与整个值匹配,而不仅仅是任何子集(有点像在模式开头暗示一个
^(?:
和一个)$
在结尾)。
因此,只需使用pattern="\d{4}"
:
input:valid {
color: green;
}
input:invalid {
color: red;
}
<form name="form1">
<input type="text" name="pincode" maxlength="4" id="pin" pattern="\d{4}" required/>
<input type="Submit"/>
</form>
顺便提一下,你的 ^0[1-9]|[1-9]\d$
模式只匹配 2 位数字输入,因为它要么匹配以 0
开头的任意一个介于 1
和 9
的数字,或者匹配任意一个介于 1
和 9
的数字后面跟着任意一个数字。
此外,注意 pattern="\d{4}"
属性不能防止在该字段中输入非数字符号。请参见如何防止将无效字符键入输入字段帖子,了解如何解决这个问题。
<input type="text"
maxlength="7"
onkeypress='return event.charCode >= 48 && event.charCode <= 57'
required
/>
将您的正则表达式更改为:
pattern="\d{4}"
# allows numbers from 0000-9999
pattern="[1-9][0-9]{3}"
# from 1000-9999
像{1,4}
这样的模式可以允许有1到4位数字,而像{x}
这样的模式则固定了数字的位数为x。
编辑:正如@Tushar指出的那样,以前的正则表达式[1-9]{4}
是错误的,因为它不允许有任何0。
1[0-9]{3}
将匹配1000-1999
。你要找的是[1-9][0-9]{3}
。 - Tushar请按照以下方式更改您的模式:
pattern = "^[0-9]{4}$"
重复量词{4}
应该精确地重复前一个标记4
次。
pattern="\d{4}"
允许数字范围为0000-9999
pattern="[1-9][0-9]{3}"
允许1000-9999之间的数字
像{1,4}
这样的模式将允许具有1到4位数字的数字。像{x}
这样的模式将固定数字的位数为x
次。
pattern="\d{4}"
。无需使用锚点,因为模式属性默认已经被锚定。 - Wiktor Stribiżewtype="number" maxlength="4"
:-? - Álvaro Gonzálezmaxlength
只会限制输入不超过4个字符。因此,输入0、1、2、3个字符是有效的。在这里,OP想要限制用户只能输入恰好4个数字。 - Tushar