0

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

}

任何帮助表示赞赏,谢谢!

4

1 回答 1

1

实际上你有正确的逻辑,但你宁愿测试一个正则表达式中的字符串:

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, '') );
                    });
                });
于 2013-06-10T21:15:58.783 回答