我正在为HTML5输入类型“电子邮件”验证编写一个小后备,如果电子邮件无效,它将提醒用户。 [对于较旧的浏览器,脚本会将“数据”设置为相关输入,下面的脚本会选择数据的“电子邮件”部分]。我不确定如何完全设置这个RegExp测试以找到结果。
这是我到目前为止(这是在$ .each循环中),我基本上想在'if'语句中包含一个RegExp测试,如果提供的电子邮件地址不支持,则阻止表单提交RegExp。此外,我知道通过RegExp测试电子邮件并不令人惊讶,但这是W3C提供的一种后备解决方案,我们的团队决定采用它。
/*
* Email fallback
*/
var self = $(this)
var emailFallback = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
if ( self.data('fallback') === 'email' ) {
var str = self.val()
console.log(str.test(emailFallback))
return str.test(emailFallback)
// prevent submission
event.preventDefault()
}
感谢任何帮助,谢谢!
答案 0 :(得分:1)
实际上你有正确的逻辑,但你宁愿测试一个来自regEx的字符串:
emailFallback .test(str);
我在一个Web应用程序中做了类似的事情。如果支持html5,我已经在输入中添加了一个模式属性,它将作为正则表达式本身,没有JS。如果不支持html5,我添加了相同的正则表达式作为alt属性,并在输入字段上键入或模糊时检查它。
代码的一部分:
strictNum.each(function() {
var el = $(this);
if (html5) {
el.get(0).type = 'text';
el.attr('pattern', '[\\d]+');
el.attr('required', 'required');
if (el.is('#edit-submitted-zahlverfahren-bankleitzahl')) el.attr('pattern', '^(\\d){8}$');
}
else {
el.attr('alt', '[\\d]+');
if (el.is('#edit-submitted-zahlverfahren-bankleitzahl')) el.attr('alt', '^(\\d){8}$');
}
el.bind('keyup', function() {
var v = el.val();
if ( v.match(/[\d]/gi) !== null && v.length && v.match(/[\d]/gi).length !== v.length ) el.val( el.val().replace(/[^\d]/gi, '') );
});
});