我需要与JS匹配:
- 一个号码,
- 后面可能跟一个(或两个)字母,
- 并且可以用空格隔开
- 或连字符
例如:
23
4545a
1B
554 cs
34-S
正则表达式不是我的强项,所以我只有这个......
^[0-9A-Za-z ]+$
更新:
^(0-9A-Za-z )+$
我需要与JS匹配:
例如:
23
4545a
1B
554 cs
34-S
正则表达式不是我的强项,所以我只有这个......
^[0-9A-Za-z ]+$
更新:
^(0-9A-Za-z )+$
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]
将匹配大写或小写字母他们更新的正则表达式匹配所有示例,并且在我提到的两个无效案例上也失败了。
注意:如果数字后跟一个空格应该被认为是有效的,那么在测试之前修剪该值也将允许这种情况通过。
可能有点冗长,但演示了我认为所需的部分
[0-9]+[\s-]{0,1}[a-zA-Z]{0,2}
等于:
此正则表达式匹配您的每个测试场景。
会跟随吗?
^[0-9]+( |-)?[A-Za-z]{0,2}$
(^[0-9]+( |-){0,1}[a-zA-Z]{0,2})
您可以在http://gskinner.com/RegExr/进行测试,这是一个非常有用的工具来测试和理解 RegEx