0

我需要与JS匹配:

  • 一个号码,
  • 后面可能跟一个(或两个)字母,
  • 并且可以用空格隔开
  • 或连字符

例如:

23 
4545a 
1B 
554 cs
34-S

正则表达式不是我的强项,所以我只有这个......

^[0-9A-Za-z ]+$

更新:

^(0-9A-Za-z )+$
4

4 回答 4

2

Aaaaand,我的是其他答案的混合体。:)

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

编辑- 好的,所以我在我们所有的答案中都发现了一个错误。LOL 因为 alpha 模式允许末尾有 0 个字符,并且空格和破折号是可选的,所以到目前为止我们提供的正则表达式会导致以下测试数据出现误报:123-456 <--- with a space at the end

第二个可以通过使用$.trim()值来解决(如果您尝试测试的内容允许这样做),但第一个不能。

所以 。. . 这给我们带来了一个新的正则表达式来处理这些情况:

/^\d+([ -]?[a-z]{1,2})?$/i
  • \d+= 1 位或更多位
  • [ -]?= 一个可选的空格字符(注意:只有空格,不是“空白”)或破折号
  • [a-z]{1,2}= 必须有 1 或 2 个字母字符(注意:目前只有小写字母,但请继续阅读......)
  • 围绕最后( . . . )?两个模式强制空格或破折号仅在数字之后有效,如果它们是,则后跟 1 或 2 个字母。. . 但是,作为一个整体,整个组是可选的。
  • 模式末尾的i使其不区分大小写,因此[a-z]将匹配大写或小写字母

他们更新的正则表达式匹配所有示例,并且在我提到的两个无效案例上也失败了。

注意:如果数字后跟一个空格应该被认为是有效的,那么在测试之前修剪该值也将允许这种情况通过。

于 2013-08-15T15:51:57.187 回答
2

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

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

等于:

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

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

于 2013-08-15T15:42:09.567 回答
1

会跟随吗?

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

于 2013-08-15T15:41:33.160 回答
1
(^[0-9]+( |-){0,1}[a-zA-Z]{0,2})

您可以在http://gskinner.com/RegExr/进行测试,这是一个非常有用的工具来测试和理解 RegEx

于 2013-08-15T15:48:13.780 回答