Javascript 正则表达式将数字与可能的字母匹配

Javascript 正则表达式将数字与可能的字母匹配,javascript,regex,Javascript,Regex,我需要与JS匹配: 一个数字 后面可能跟一个(或两个)字母 可以用一个空格隔开 或连字符 例如: 23 4545a 1B 554 cs 34-S Regex不是我的强项所以我只有这个 ^[0-9A-Za-z ]+$ 更新: ^(0-9A-Za-z )+$ 下面可以吗 ^[0-9]+(|-)?[A-Za-z]{0,2}$以下内容可以吗 ^[0-9]+(|-)?[A-Za-z]{0,2}$可能有点冗长,但我认为演示了所需的部分 [0-9]+[\s-]{0,1}[a-zA-Z]{0,2

我需要与JS匹配:

  • 一个数字
  • 后面可能跟一个(或两个)字母
  • 可以用一个空格隔开
  • 或连字符
例如:

23 
4545a 
1B 
554 cs
34-S
Regex不是我的强项所以我只有这个

^[0-9A-Za-z ]+$
更新:

^(0-9A-Za-z )+$
下面可以吗

^[0-9]+(|-)?[A-Za-z]{0,2}$

以下内容可以吗


^[0-9]+(|-)?[A-Za-z]{0,2}$

可能有点冗长,但我认为演示了所需的部分

[0-9]+[\s-]{0,1}[a-zA-Z]{0,2}
等同于:

  • 类[0-9]中的任何字符,重复一次或多次
  • 空格或连字符,0和1重复
  • 类[a-zA-Z]中的任何字符,重复0到2次

这个正则表达式匹配您的每个测试场景。

可能有点冗长,但我认为它演示了所需的部分

[0-9]+[\s-]{0,1}[a-zA-Z]{0,2}
(^[0-9]+( |-){0,1}[a-zA-Z]{0,2})
等同于:

  • 类[0-9]中的任何字符,重复一次或多次
  • 空格或连字符,0和1重复
  • 类[a-zA-Z]中的任何字符,重复0到2次
此正则表达式与您的每个测试场景匹配

(^[0-9]+( |-){0,1}[a-zA-Z]{0,2})
您可以在中进行测试,这是一个非常有用的工具,用于测试和理解正则表达式

您可以在中进行测试,这是一个非常有用的工具,可以用来测试和理解RegEx,我的答案是其他答案的混合体

  • \d+
    =1个或多个数字
  • [-]?
    =可选的空格字符(注意:仅限空格,而非“空白”)或破折号
  • [a-z]{0,2}
    =1或2个字母字符(注意:目前仅小写,但请继续阅读…)
  • 模式末尾的
    i
    使其不区分大小写,因此
    [a-z]
    将匹配大写或小写字母
编辑-好的,我在所有答案中都发现了一个错误。LOL因为alpha模式允许在结尾处有0个字符,空格和破折号是可选的,所以到目前为止我们提供的正则表达式会导致以下测试数据出现假阳性:
123-
456aaaa,我的是其他答案的混合体。:)

  • \d+
    =1个或多个数字
  • [-]?
    =可选的空格字符(注意:仅限空格,而非“空白”)或破折号
  • [a-z]{0,2}
    =1或2个字母字符(注意:目前仅小写,但请继续阅读…)
  • 模式末尾的
    i
    使其不区分大小写,因此
    [a-z]
    将匹配大写或小写字母

编辑-好的,我在所有答案中都发现了一个错误。LOL因为alpha模式允许在结尾处使用0个字符,空格和破折号是可选的,所以到目前为止我们提供的正则表达式会导致以下测试数据出现误报:
123-
456这是最常见的正则表达式混淆之一:当您在字符类中放置一组标记时(这是方括号),您正在匹配其中任何一个字符。因此
[0-9A-Za-z]
匹配单个字符,可以是数字,也可以是字母(大写或小写)或者一个空格。第一个数字,可以是多少个数字?你能举一些例子吗?什么可以用空格或连字符分隔?字母之间的数字,字母之间的字母,数字之间的数字,两者都可以?你能混合和匹配空格和连字符吗?@lpiepiora你误解了我的意思。我知道+适用于整个字符字符类(它是一个单个字符),字符类中的顺序不重要。我是说OP需要先有数字,然后是空格或连字符,然后是字母,按顺序排列。所以你不能只说“无限重复(从这些字符中抽取一个字符)”并得到正确的结果。@Talemybad…fixed这是最常见的正则表达式混淆之一:当你在一个字符类(即方括号)中放入一组标记时,你匹配的是其中任何一个字符。因此
[0-9A-Za-z]
匹配的单个字符可以是数字,也可以是字母(大写或小写)或者一个空格。第一个数字,可以是多少个数字?你能举一些例子吗?什么可以用空格或连字符分隔?字母之间的数字,字母之间的字母,数字之间的数字,两者都可以?你能混合和匹配空格和连字符吗?@lpiepiora你误解了我的意思。我知道+适用于整个字符字符类(它是一个单个字符),字符类中的顺序不重要。我是说OP需要先有数字,然后是空格或连字符,然后是字母,按顺序排列。所以你不能只说“无限重复(从这些字符中抽取一个字符)”并得到正确的结果。@talemyn my bad…Fixed我们都忽略了几个“失败案例”…更新了我的答案以解决这个问题。我们都忽略了几个“失败案例”…更新了我的答案以解决这个问题。