JavaScript测试RegEx总是返回false

问题描述 投票:0回答:2

我正在尝试验证字符串是否看起来像一个有效的电子邮件地址,但无论我输入什么,该函数总是返回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>
javascript
2个回答
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");
     }
}

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