【问题标题】:REGEX in javascript not working for dots (.) in JavaScriptJavaScript 中的正则表达式不适用于 JavaScript 中的点 (.)
【发布时间】:2015-02-04 16:47:10
【问题描述】:

我正在使用正则表达式来验证 JavaScript 中的电子邮件地址。

正则表达式非常简单。它检查三件事:1)'@', 2)'.' (something@gmail.com 中的“点”),以及 3) 电子邮件地址中的“a-z”。如果所有三个都返回 true,则电子邮件地址有效(至少根据我的验证)

代码如下:

function checkemail(){
  var e = document.getElementById("email").value;
  if((e.match(/@/g)==null)||(e.match(/[a-z]/ig)==null)||(e.match(/./g)==null)){
  //display error message
  }
}

我的问题是:

(e.match(/./g)==null); //returns false even though there are no dots in the string e

即使字符串中没有点也返回 false。

例如:

("thisIsMyEmail".match(/./ig))==null //returns false

为什么它应该为真却返回假?

【问题讨论】:

  • 句点在正则表达式中是特殊的,它表示“任何字符”,而不仅仅是句点,要使其表示句点,必须对其进行转义。
  • 不要将match 用于文字字符串,而应使用String.prototype.indexOf()

标签: javascript regex


【解决方案1】:

试试这个

(e.match(/\./g)==null);

. 匹配任何字符,因此需要转义 /\./g

【讨论】:

    【解决方案2】:

    /./g(或/./ig)将匹配其中至少有一个字符的任何字符串。 . 在正则表达式中比较特殊,表示“这里的任意字符”。

    对于实际点,用反斜杠转义它:/\./g

    【讨论】:

      【解决方案3】:

      首先,您不需要检查字符串是否为空。只需使用这个:

      var email = "Godisgood@gmail.com";
      
      if (email.match(/^\S+\@\S+\.\S+$/i)){
      alert("Email address passed validation.");
      }

      【讨论】:

      • 感谢您的回复。它的作用和我的差不多。它似乎不检查最后一个点之后的字母。例如:bob@gmail。返回真。但它有帮助。谢谢
      • @raneshu,对不起,我的代码有点乱。立即尝试。
      【解决方案4】:

      你必须逃避. 未转义句点表示匹配任何字符。

      如果使用您的表达式使用字符串“abc”,则会生成一个包含字符“a”、“b”和“c”的数组。

      在你的 sn-p 中正确答案是

      (e.match(/\./g)==null);
      

      这应该会达到您的预期

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多