正则表达式限制一个特定字符的出现

时间:2018-07-11 11:07:27

标签: regex

我正在研究一种允许字符“ x”和0到9之间任意数字的正则表达式。

以下是规则。

  • 整个字符串的长度必须为4
  • 仅接受0-9或'x'
  • 必须正好有一个'x'

^(x|[0-9])(x|[0-9])(x|[0-9])(x|[0-9])$

我当前的正则表达式只能使用规则1和2,但是不能过滤掉多个带有'x'的规则。

x000 //ok
xxxx //ok , but should be not ok
23xx //ok , but should be not ok
a90d //not ok
11x1 //ok
x213 //ok

sample regex editor here

由于正则表达式将用于keyup的验证,因此,当用户键入一到四个keyup时,该规则必须引起关注。

更新的规则

  • 整个字符串的长度必须在0到4之间
  • 仅接受0-9或'x'
  • 不能有多个“ x”

3 个答案:

答案 0 :(得分:3)

您可以使用

/^(?=[0-9x]{4}$)[0-9]*x[0-9]*$/

/^(?=[\dx]{4}$)\d*x\d*$/

详细信息

  • ^-字符串的开头
  • (?=[\dx]{4}$)-积极的前瞻性,检查从字符串的开始到结尾到底有4位数字或x
  • \d*-0位数以上
  • x-一个x
  • \d*-0位数以上
  • $-字符串的结尾。

请参见regex demo

请注意,在这种情况下,您甚至可以将整个模式缩减为

/^(?=.{4}$)\d*x\d*$/
  ^^^^^^^^^

仅检查字符串的长度而不检查字符的类型(因为数字和x是非换行符)。

答案 1 :(得分:2)

请提前查看“仅1 x”条件:

^(?=\d*x\d*$).{4}$

答案 2 :(得分:0)

一个选项使用超前来处理一个x要求:

^(?=.*x)(?!.*x.*x)[0-9x]{4}$

请参阅正则表达式演示。

Demo