正则表达式只允许一个破折号或一个空格

津波

我想要一个允许数字和一个破折号或数字和一个空格的表达式。空格或破折号是可选的。我试过这个

/^([0-9]+(-[0-9]+)?)|([0-9]+(\s[0-9]+)?)$/

接受的正则表达式:

  1. 11-222
  2. 444 99

让我们解释一下您的正则表达式。

  ^                   # beginning of line
    (                   # start group 1
        [0-9]+          # 1 or more digits
        (               # start group 2
            -           # a hyphen
            [0-9]+      # 1 or more digits
        )?              # end group 2, optional
    )                   # end group 1
|                   # OR
    (                   # start group 3
        [0-9]+          # 1 or more digits
        (               # start group 4
            \s          # a space
            [0-9]+      # 1 or more digits
        )?              # end group 4, optional
    )                   # end group 3
  $                   #  end of line

OR 在行首的组 1 和行尾的组 3 之间起作用。但是您希望第 1 组和第 3 组锚定在开头结尾。

在第 1 组和第 3 组上添加一个组:

^(([0-9]+(-[0-9]+)?)|([0-9]+(\s[0-9]+)?))$

您可以使用非捕获组(更有效)而不是捕获组

^(?:(?:[0-9]+(?:-[0-9]+)?)|(?:[0-9]+(?:\s[0-9]+)?))$

组合字符类中的连字符和空格并删除多余的组:

^[0-9]+(?:[-\s][0-9]+)?$

如果您正则表达式的味道支持它,改变[0-9]\d最后你的正则表达式变成:

^\d+(?:[-\s]\d+)?$

简单多了,不是吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式只允许给定字符类中的一个(可能重复)字符

正则表达式:允许字母,数字和空格(至少一个字母或数字)

正则表达式,允许在中间有一个空格,但有字符限制。

解释bash / pipe表达式中的最后一个破折号

正则表达式:3个单词,中间有两个破折号

正则表达式仅允许使用字母,并且只能使用一个空格

正则表达式从井号“#”捕获到下一个空格

正则表达式-在最后一个连字符/破折号之前提取文本

正则表达式只允许逗号和一个空格

正则表达式-至少一个字母数字字符并允许空格

是否有一个正则表达式允许固定大小的单词尾随空格?

一个允许空格,逗号,点,数字和任何字母的正则表达式?

正则表达式用一个破折号替换2个或更多破折号

正则表达式只允许使用字母,数字,点,下划线和破折号。至少5个字符

正则表达式只允许数字和一个点-例如,它不应允许1.1

将正则表达式匹配到下一个特殊字符,同时允许空格

正则表达式只允许一个单词后跟一个URL

正则表达式只用一个破折号获取字符串

正则表达式python 4个整数后跟一个空格

正则表达式:如何匹配整个单词,其中只有一个破折号不超过 1 个破折号?

在 JavaScript 中仅使用正则表达式选择第一个破折号

正则表达式 - 名称中只允许一个空格和一个连字符

正则表达式只允许包含至少一个字符且没有空格的字母数字

如何使正则表达式在负前瞻后只允许一个字符

使用 R 正则表达式识别两个字符后跟一个破折号和两个数字

在同一个正则表达式中查找带有破折号/连字符而没有的单词?

正则表达式只允许一个特殊字符并排除其他字符

正则表达式:匹配两个特定符号之间的每一个破折号

如何使用一个正则表达式命令删除所有括号、方括号、破折号和空格?