将RegExp作为HTML5回退测试输入值

时间:2013-06-10 21:08:16

标签: jquery validation

我正在为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()

}

感谢任何帮助,谢谢!

1 个答案:

答案 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, '') );
                    });
                });