javascript - 使用 RegExp 构造函数导致错误输出
问题描述
我有一个用于电子邮件地址验证的正则表达式。它作为文字表达式工作正常,但在使用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
解决方案
您需要删除您在 中指定的模式的引号,以消除转义字符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
推荐阅读
- javascript - NodeJS:按月计算
- vue.js - 在 vue.js 项目的公共路径(不是 index.html 文件)中使用环境变量
- facebook - 与 Twitter/Facebook/Instagram 分享 url+image+text
- python - Scrapy - 如何解析多个 start_urls
- linux - 如何修复通信器 MPI_COMM_WORLD 上的进程 [135921655, 0] 报告的 MPI_Send 中发生的错误
- c++ - c ++如何显示字符串搜索关键字及其确切的行号?
- batch-file - 从批处理脚本中的文件夹中获取两个最近的文件
- c# - 如何制作我的 Web 服务,以便可以使用基本身份验证对其进行身份验证?
- python - keras中的点和密集问题
- javascript - Jquery 在调用 api 的 OnChange 事件上应用回调