正则表达式可以接受字母数字字符和仅一个@符号

时间:2018-07-03 20:03:02

标签: javascript regex

如果输入的值不是字母数字字符和符号_.- @,我正在编写javascript脚本,它将发出警报。

我使用了以下表达式,但是令人担忧的是,我只需要出现一次@符号。我该怎么办?

!/^[ A-Za-z0-9_.-@]*$/

2 个答案:

答案 0 :(得分:4)

您可以查找多个不是'@'的接受字符,然后只查找一个'@',然后再查找任意数量的接受字符。 \w元字符还将替换您的A-Za-z0-9_部分,因此您可以使用以下代码:

!/^[ \w.-]*@[ \w.-]*$/

答案 1 :(得分:-1)

如果可以完全不使用正则表达式来驱动,则可以使用includes来查看@是否已经在字符串中。如果是这样,我们不允许它,否则我们会允许它。

如果字符不是@,我们将使用正则表达式对其进行测试。

document.getElementById('input-test').addEventListener('keydown', e => {
  let value = e.currentTarget.value
  let key = e.key
  if ((value.includes('@') && key == '@') || !!key.match(/[\sA-Za-z0-9_.\-@]/) === false) e.preventDefault()
})
<input type="text" id="input-test">