代码之家  ›  专栏  ›  技术社区  ›  Beingnin

使用regexp构造函数会导致错误的输出[duplicate]

  •  0
  • Beingnin  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个regex表达式,用于电子邮件地址验证。它作为文本表达式工作正常,但在使用 RegExp 构造函数。

    var emailpattern=/^(([^<>()\[\]\\.,;:\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,}))$/g;
    
    console.log(emailpattern.test('nithin@gmail.com'))//true
    
    var obj = new RegExp('^(([^<>()\[\]\\.,;:\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,}))$','g');
    
    console.log(obj.test('nithin@gmail.com'))//false
    1 回复  |  直到 6 年前
        1
  •  1
  •   Ankit Agarwal    6 年前

    您需要删除在 new RegExp() 为了摆脱额外的开销 \ 特点:

    var emailpattern=/^(([^<>()\[\]\\.,;:\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,}))$/g;
    
    console.log(emailpattern.test('nithin@gmail.com'))//true
    
    var obj = new RegExp(/^(([^<>()\[\]\\.,;:\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,}))$/,'g');
    
    console.log(obj.test('nithin@gmail.com'))//false

    逃逸 \ 特点:

    var emailpattern=/^(([^<>()\[\]\\.,;:\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,}))$/g;
    
    console.log(emailpattern.test('nithin@gmail.com'))//true
    
    var obj = new RegExp('(([^<>()\\[\\]\\\.,;:\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,}))','g');
    
    console.log(obj.test('nithin@gmail.com'))//false