【问题标题】:Jquery Value match Regex [duplicate]Jquery值匹配正则表达式[重复]
【发布时间】:2014-03-10 18:00:33
【问题描述】:

我正在尝试通过 JQuery 验证电子邮件的输入:

我的 JQuery

<script>
/* <![CDATA[ */
  jQuery(function(){
   $( ".mail" ).keyup(function() {
   var VAL = $(this).val();
   var email = new RegExp(^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$);

   if(VAL.test(email)){
   alert('Great, you entered an E-Mail-address');
   }
   });
  });
  /* ]]> */
  </script>

即使我输入了 example@example.com,它也不会发出警报。 我已经尝试过 .test() 和 .match(),我做错了什么?

【问题讨论】:

    标签: javascript jquery regex match


    【解决方案1】:
    • 将字符串传递给 RegExp 或使用 // 语法创建正则表达式
    • 请致电regex.test(string),而不是string.test(regex)

    所以

    jQuery(function () {
        $(".mail").keyup(function () {
            var VAL = this.value;
    
            var email = new RegExp('^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$');
    
            if (email.test(VAL)) {
                alert('Great, you entered an E-Mail-address');
            }
        });
    });
    

    【讨论】:

    • 你可以用this.value代替$(this).val()
    • 请注意这将不接受小写字母。
    • 这是一个区分大小写的表达式,因此abc@abc.abc 不被接受,而ABC@ABC.ABC 被批准。您可以将其修改为'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$' 以解决问题,但还有另一个问题,在此正则表达式abc@abcd 中不带任何点被接受!我建议改用这个:/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/g,但是当域名中有连字符时,这些表达式都不接受电子邮件地址:abc@abc-abc.com,请访问此页面以获得最佳正则表达式:link
    • 当用new RegExp 构造一个RE 时,如果你传递了一个sting,你需要双转义反斜杠。例如,您的代码中有\.,但这只是一个不必要的转义字符-'\.' === '.'。最好避免使用new RegExp,除非您需要从变量动态构造 RE。
    • @leo848 $(this).val() 只是包装了this.value - 这是获取相同数据的一个额外函数调用,因此没有必要。
    【解决方案2】:

    改成这样:

    var email = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
    

    这是一个正则表达式文字,它传递了i 标志,表示不区分大小写。

    请记住,电子邮件地址验证是困难(在掌握正则表达式的末尾有一个 4 或 5 页的正则表达式来证明这一点)并且您的表达式肯定不会捕获所有有效的 e-邮件地址。

    【讨论】:

    • var email = new RegExp('^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,4} $', 'i');
    • 我更喜欢这样改
    • 除了您使用字符串而不是(可以说是首选的)正则表达式文字语法之外,我没有看到任何不同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多