[英]How to validate input field with JavaScript
如果我的输入字段带有某个正则表达式的pattern属性,是否有一个JavaScript / JQuery函数可以访问该输入DOM元素,并验证其中的当前值是否符合该模式?
您将需要使用HTML5有效性框架 (请选中“使用JavaScript验证表单”部分),该框架为已为其设置验证的每个字段提供一个validity
对象。 此validity
对象公开了一组“有效性约束”(对于HTML5原生提供的每种验证类型,一个)。
对于您的情况,您需要检查元素上的validity.patternMismatch
,以查看其是否无效。 但是,当仅将一种类型的验证应用于元素validity.valid
就足够了。
下面,我们有一个表单字段,它既是必需的,又为其设置了模式。 在这种情况下,知道字段无效可能不足以满足您的目的,因此代码不仅告诉您元素是否无效,而且还表明您可以检查各个约束以了解原因。
尝试不输入任何数据,然后单击提交按钮。 这将告诉您元素无效,但是如果查看约束报告,则在这种情况下将看到valueMissing = true
。 然后尝试仅输入几个字符,您仍然会看到它显示为无效字符,但在这种情况下将显示patternMismatch = true
。
var field = document.getElementById("ss"); var btn = document.getElementById("btnValidity"); btn.addEventListener("click", function(evt){ console.clear(); // You can test for simple validity with the valid property console.log("Is field valid? " + ss.validity.valid); // And, you can get more specific by checking all the validity constraints // Here, we're just looping the entire set for demo purposes for(var constraint in ss.validity){ if(ss.validity[constraint]){ console.log(constraint + " = " + ss.validity[constraint]); } } });
/* Valid and invalid elements can show their state in real time with CSS pseudo-classes */ input[type=text]:active, input[type=text]:focus { outline:none; } input[type=text]:valid { box-shadow:0 0 3px green; } input[type=text]:invalid { box-shadow:0 0 3px red; }
SS#: <input type="text" required pattern="^\\d{3}-\\d{2}-\\d{4}$" id="ss" placeholder="xxx-xx-xxxx"> <button id="btnValidity">Check validity</button>
IE 10和更高版本支持的 HTMLInputElement.checkValidity()
将立即检查所有约束。
console.log(document.getElementById('a').checkValidity()) console.log(document.getElementById('b').checkValidity())
<input id="a" pattern="a+" value="aaaa" /> <input id="b" pattern="a+" value="aaba" />
$(function () { var $input = $('#my-input'); $input.on('change', function () { var pattern = $input.attr('data-my-pattern-attr'); var regex = new RegExp(pattern, "g"); if ($input.val().match(regex)) { console.log('matches'); } else { console.log('no match'); } }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" id="my-input" data-my-pattern-attr="[az]+" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.