如何将正则表达式量词插入范围

时间:2015-08-14 05:02:50

标签: regex

我有这个正则表达式范围

/([a-zA-Z0-9\.\-#_~!$&'()*+,;=:]+)/

表示用户用户名的允许字符数。我想将@ char添加到范围中,但将其数量限制为0或1,并使其位置无关紧要。

我知道@ {0,1}是量词语法,但我如何将其与我的范围结合以符合我的规格。

要求:

  1. A - Z字母
  2. 0 - 9个数字
  3. 仅允许1 @
  4. 特殊字符:# - _~! $& ' ()* + ,; =:
  5. 由于

3 个答案:

答案 0 :(得分:2)

您可以使用这样的前瞻性正则表达式:

/^(?!(?:[^@]*@){2})[-a-zA-Z0-9.#_~!$&'()*+,;=:@]+$/

RegEx Demo

(?!(?:[^@]*@){2})将禁止输入中的@,因此您可以在输入中使用0或1 @。另请查看演示。

答案 1 :(得分:0)

我想在其中使用 \ w 让你的Regex很小

这是w在正则表达式中表示的内容

  • \ w:匹配任何单词字符(字母数字和下划线)。仅匹配low-ascii字符(无重音或非罗马字符)。相当于[A-Za-z0-9 _]

请展望未来,这将减少你的正则表达式的长度。

^(?!(?:[^@\n]*@){2})[\w.#_~!$&'()*+,;=:@]+$

答案 2 :(得分:-1)

只需复制正则表达式并在中间添加@

/^([-a-zA-Z0-9.#_~!$&'*+,;=:()]+@?[-a-zA-Z0-9.#_~!$&'*+,;=:()]+)$/

或更确切地说:

/^(@|@?[-a-zA-Z0-9.#_~!$&'*+,;=:()]+|[-a-zA-Z0-9.#_~!$&'*+,;=:()]+@|[-a-zA-Z0-9.#_~!$&'*+,;=:()]+@[-a-zA-Z0-9.#_~!$&'*+,;=:()]+)$/