正则表达式匹配数字与潜在的字母

时间:2013-08-15 15:36:11

标签: javascript regex

我需要与JS匹配:

  • 一个数字,
  • 可能后跟一个字母(或两个),
  • 并且可以用空格分隔
  • 或连字符

例如:

23 
4545a 
1B 
554 cs
34-S

正则表达式不是我的强项,所以我得到的就是这个......

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

更新:

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

4 个答案:

答案 0 :(得分:2)

可能有点冗长,但是我想到了所需的部分

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

等同于:

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

此正则表达式与您的每个测试方案相匹配。

答案 1 :(得分:2)

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

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

编辑 - 好的,所以我在所有答案中都发现错误。 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个字母字符(注意:目前只有小写字母,但请继续阅读......)
  • 围绕最后两种模式的( . . . )?强制空格或短划线仅在数字 IF 之后有效,然后是1或2个字母。 。 。但是,整个组都是可选的,作为一个整体。
  • 模式末尾的i使其不区分大小写,因此[a-z]将匹配大写或小写字母

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

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

答案 2 :(得分:1)

以下会这样做吗?

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

答案 3 :(得分:1)

(^[0-9]+( |-){0,1}[a-zA-Z]{0,2})

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