JavaScript测试正则表达式总是返回false

JavaScript测试正则表达式总是返回false,javascript,Javascript,我试图验证字符串是否看起来像有效的电子邮件地址,但是不管我键入什么,函数总是返回false function looksLikeMail(str) { var patt = new RegExp(/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i);

我试图验证字符串是否看起来像有效的电子邮件地址,但是不管我键入什么,函数总是返回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");
       }
}

函数looksLikeMail(str){
var patt=newregexp(/^(([^()\[\]\,;:\s@\“]+(\.[^()\[\]\,;:\s@\“]+)*)(\”+)(([^()[\]\,;:\s@\“]+\)+[^()[\]\,;:\s@\“]{2,}$/i);
返回模式试验(str);
}
VarC1;
VarC2;
var错误=错误;
c1=document.getElementById(“t8”).值;
c2=document.getElementById(“t9”).值;
if(document.getElementById(“t8”).value!=“document.getElementById(“t9”).value!”){
if(document.getElementById(“t8”).value!=“”){
var validE;
validE=looksLikeMail((字符串)(t8));
如果(!validE){
错误=真;
警报(“无效电子邮件地址”);
}
}
HTML


电子邮件(至少一封)
电子邮件-1
电子邮件-2

您的
looksLikeMail
很好(对于'a@a.com")

不过,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");
     }
}
试试这个代码

        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
函数looksLikeMail(str){
var regex=/^([^()\[\]\\,;:\s@“]+(\.[^()\[\]\\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.]124;([a-zA Z-0-9]+]2});
返回正则表达式测试(str);
}
looksLikeMail(“aa@aa.cc“”;//正确
looksLikeMail(“aa@aa.c“”;//错误
looksLikeMail(“demo_a-su@abcca.cd.bc“”;//正确
你也可以在这里测试正则表达式

正则表达式贷记到。

似乎对我有用:你对什么有效的电子邮件地址有问题?使用RegExp构造函数或RegExp文本语法。为什么你分配变量
c1
c2
,但不使用它们?你应该解释你更改了什么,以及它是如何解决问题的。好吧,基本上我使用另一个regex模式,不这是一个挑战,找出差异。解释他的模式有什么问题。
        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