JavaScript测试RegEx总是返回false

时间:2019-04-26 15:42:43

标签: javascript

我正在尝试验证字符串是否看起来像有效的电子邮件地址,但是无论我键入什么,该函数始终返回false

function looksLikeMail(str) {
      var patt = new RegExp(/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i);
      return patt.test(str);
    }

var c1;
var c2;
var error = false;
c1 = document.getElementById("t8").value;
c2 = document.getElementById("t9").value;
if (document.getElementById("t8").value != "" || document.getElementById("t9").value != ""){
     if (document.getElementById("t8").value != ""){
     var validE;
     validE = looksLikeMail((String)(t8));
     if (!validE){
        error = true;
        alert("invalid email address");
       }
}

HTML

<div class="form-row">
  <label class="col align-self-center">&nbsp;<b>email (at least one)</b></label>
  </div>


  <div class="form-row">
  <div class="col-md-6 offset-md-3">
  <label for="inputEmail4">email-1</label>
  <input type="email" class="form-control" id="t8" placeholder="email">
  </div>

  <div class="col-md-6 offset-md-3">
  <label for="inputEmail5">email-2</label>
  <input type="email" class="form-control" id="t9" placeholder="email">
  </div>
  </div>

2 个答案:

答案 0 :(得分:1)

您的looksLikeMail很好(对于“ a@a.com”返回true)。

其余的JS似乎有问题。首先,您的变量t8从未定义。另外,(String)是无效的语法。要强制转换为JS,您可以改为使用String(t8)。话虽如此,这是不必要的,因为input.value无论如何都会返回一个字符串。

由于您似乎不熟悉JS,因此我也做了一些小的清理工作:

let t8 = document.getElementById("t8").value;
if (t8) {
     let validE = looksLikeMail(t8);
     if (!validE){
        error = true;
        alert("invalid email address");
     }
}

答案 1 :(得分:0)

尝试此代码

        function looksLikeMail(str){
            var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
            return regex.test(str);
        }

        looksLikeMail("aa@aa.cc");// true
        looksLikeMail("aa@aa.c");// false
        looksLikeMail("demo_a-su@abcca.cd.bc");// true

还可以在此处测试正则表达式

https://regex101.com/r/777dwJ/1

正则表达式功劳。 https://stackoverflow.com/a/46181/5708097