[英]In Javascript Regex, how do I validate that a string is a valid hexadecimal colour?
[英]How do I validate this regex in JavaScript?
<input id="phone" name="phone" placeholder="(XXX)XXX-XXXX" type="tel"
pattern="^(?:\(\d{3}\)|\d{3})[- ]?\d{3}[- ]?\d{4}$" required="true"/>
如何验证该模式是否在JavaScript中用于不支持模式属性的浏览器?
谢谢您的输入-我尝试了以下几种方法,但似乎找不到“ true”的东西-RegExp在FireFox和Chrome的HTML模式字段中有效。 但是,当我尝试将其与javaScript一起使用时,它总是返回false?
有许多polyfill可以在较旧的浏览器中启用此功能:
我建议使用polyfilling-这不会改变现代浏览器的行为,但会在旧的浏览器中模拟它。 ( 顺便说一句 : Modernizr polyfills列表很棒。)
您也可以自己编写; 其他一些答案则说明了如何完成。
创建一个onchange
事件,该事件读取pattern
属性并针对该value
运行它。
// Only bind event if we need to
if(!('pattern' in document.createElement('input'))){
// Bind the event
document.getElementById('phone').addEventListener('change', function(){
// Get the regex and value then test it
var regex = new RegExp(this.pattern),
val = this.value,
valid = regex.test(val);
// Is it valid?
if(!valid){
// Do something when it's not
}
});
}
您应该在提交表单或从输入中失去焦点时进行验证。
如果您使用jQuery,这将适用于所有具有pattern
属性的元素:
$('[pattern]').each(function() {
if (!$(this).val().match($(this).attr('pattern')))
alert('Bad value');
});
如果没有,您可以为此做点事情(类似):
var inputs = getElementsByName('input');
for (var index in inputs) {
var input = inputs[index];
var pattern = input.getAttribute('pattern');
if (pattern != '' && pattern != null) {
if (!input.value.match(pattern))
alert('Bad value');
}
}
这些将遍历具有模式的属性,以进行识别,检查并在出现问题时提醒用户。 当然,您可以将警报更改为想要处理的任何方式(例如,返回false可以取消提交表单)。
我尚未测试此代码,但这就是要点。
您可以使用polyfill或在输入中添加onchange
事件。
document.getElementById('phone').addEventListener('change', function(){\
// returns true if input matches regexp, otherwise it returns false
var isValid = RegExp(this.pattern).test(this.value);
});
var regex = /^(?:\(\d{3}\)|\d{3})[- ]?\d{3}[- ]?\d{4}$/;
if(phone.value.match(regex)){
console.log('true');
}else{
console.log('false');
}
我刚结束使用了它。 @ _ @
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.