你所需的只有这个:
<form action="/" id="form">
<input pattern="\d{0,5}([,.]\d{1,2})?" title="max 5 digits and 2 decimals">
<button type="submit">submit</button>
</form>
这将允许用户输入任意数量的字符,但在表单验证时,如果模式不符合要求,则表单将失败。
该模式是一个正则表达式,读作: 从0到5个数字字符,可选地带有最多两位小数
此外,如果输入不能为空,您可以像这样添加一个required属性
<input ... pattern="" required>
如果输入为空,这也会导致验证失败。
当未满足模式时,浏览器将向用户显示title=""
内的任何内容。
通过使用此fiddle进行测试,您可以看到如何呈现验证错误:https://jsfiddle.net/aqohfsrj/2/
此外,如果您想使用JavaScript处理输入值,我建议绑定到表单的submit事件,而不是按钮的click或输入的enter-keydown事件。
document.getElementById("form").addEventListener("submit", e => {
e.preventDefault();
});
为了理解我使用的正则表达式,您可以查看这个regex101文件:
https://regex101.com/r/aHLI6u/1
最后一个建议:
尽量避免在验证时使用maxlength
;经常有这样的情况,我必须在线填写一个表单,例如要求信用卡,但它被限制为maxlength="16"
,一开始听起来像是个好主意,但如果你试图从你的笔记或其他地方复制你的信用卡号码,而它是存储为5430-0000-1111-2222
(带破折号)。当用户想要粘贴、编辑、然后提交时,禁止粘贴超过允许字符数感觉很无礼。我会让用户添加他们想要的任何内容,这样他们就可以进行现场编辑以删除括号(用于电话),删除货币符号(用于货币),删除破折号(用于信用卡)并在提交表单后进行验证。