Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 限制特定字符出现一次的正则表达式_Regex - Fatal编程技术网

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

Regex 限制特定字符出现一次的正则表达式,regex,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 //o

我正在处理一个正则表达式,它允许字符“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

由于regex将用于keyup中的验证,因此当用户键入从1到4的keyup时,该规则必须关注

更新的规则

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

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

^(?=.*x)(?!.*x.*x)[0-9x]{4}$
请参阅regex演示

您可以使用

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

详细信息

  • ^
    -字符串的开头
  • (?=[\dx]{4}$)
    -一种正向前瞻检查,检查从字符串的开始到结束是否正好有4位数字或
    x
  • \d*
    -0+位
  • x
    -一个
    x
  • \d*
    -0+位
  • $
    -字符串结束

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

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

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

使用“仅1 x”条件的前瞻:

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

你在用Ruby吗?@WiktorStribiżew不,我用那个页面只是为了测试,我在用javascript写一个验证,它们不同吗?你好像在用插件,对吧?它只支持每个字符的正则表达式。它没有在整个字符串上应用掩码。是的,我认为稍微更改一下规则就可以了,这是小提琴,你答案中的正则表达式可以控制4个字符。@tim the look-ahead断言正好有1个x。你甚至可以将其减少为
^(?=\d*x\d*$)。{4}$
,因为不需要两次检查特定模式。但是,我在回答中建议使用
/^(?=.{4}$)\d*x\d*$/
,因为在开头检查长度会更快地使不匹配的字符串失败(如果长度不允许,为什么要检查字符是否为数字)。这一行如何工作/^(?=.{4}$)\d*x\d*$/,只检查1x@LeonArmstrong已经解释过了。见详情。
^\d*x\d*$
只确保1个
x
^(?=.{4}$)
确保字符串长度为4个字符。谢谢,我现在得到了它,我用小提琴试过了,正则表达式仍然可以输入多个x,你对此有什么建议吗?@LeonArmstrong你想限制输入到HTML5输入字段吗?您只能在提交时使用
模式
进行验证。
^(?=\d*x\d*$).{4}$