用正则表达式在JavaScript中验证邮箱地址的最佳方法是什么?

推荐答案

使用regular expressions可能是最好的方法.你可以看到一系列测试here(取自chromium)

const validateEmail = (email) => {
  return String(email)
    .toLowerCase()
    .match(
      /^(([^<>()[\]\\.,;:\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,}))$/
    );
};

下面是接受unicode的常规表达式的示例:

const re =
  /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

但请记住,不应该只依赖JavaScript验证.可以很容易地禁用JavaScript.这也应该在服务器端进行验证.

下面是一个上述活动的例子:

const validateEmail = (email) => {
  return email.match(
    /^(([^<>()[\]\\.,;:\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,}))$/
  );
};

const validate = () => {
  const $result = $('#result');
  const email = $('#email').val();
  $result.text('');

  if (validateEmail(email)) {
    $result.text(email + ' is valid :)');
    $result.css('color', 'green');
  } else {
    $result.text(email + ' is not valid :(');
    $result.css('color', 'red');
  }
  return false;
}

$('#email').on('input', validate);

这是html:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<label for="email">Enter an email address: </label>
<input id="email" />
<h2 id="result"></h2>

Javascript相关问答推荐

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

React 17与React 18中的不同setState行为

react—router v6:路由没有路径

将字符串UTC Date转换为ngx—counting leftTime配置值的数字

我的服务工作器没有连接到我的Chrome扩展中的内容脚本.我该怎么解决这个问题?

TypeError:无法分解';React2.useContext(...)';的属性';basename';,因为它为空

有条件重定向到移动子域

如何在Angular拖放组件中同步数组?

DOM不自动更新,尽管运行倒计时TS,JS

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

MongoDB受困于太多的数据

删除加载页面时不存在的元素(JavaScript)

如何在Java脚本中对列表中的特定元素进行排序?

FileReader()不能处理Firefox和GiB文件

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

如果NetSuite中为空,则限制筛选

AG-GRIDreact 显示布尔值而不是复选框

未找到用于 Select 器的元素:in( puppeteer 师错误)

如何为两条动态路由创建一个页面?