简单的正则表达式验证

时间:2011-02-21 08:14:44

标签: regex

我想实现以下验证。匹配至少5个数字以及其他一些字符(例如字母和斜杠)。例如123451A/2345B2222621113C都是有效组合。但1234AA1234 。我知道{5,}给出了最少的出现次数,但我不知道如何处理其他字符。我的意思是[0-9A-Z/]{5,}不起作用:(。我只是不知道将其他字符放在正则表达式中的哪个位置。

提前致谢!

祝你好运, 斯托

3 个答案:

答案 0 :(得分:5)

使用最简单的正则表达式功能,因为您没有指定您正在使用的引擎,您可以尝试:

    .*([0-9].*){5}
    |/|\   /|/| |
    | | \ / | | +--> exactly five occurrences of the group
    | |  |  | +----> end group
    | |  |  +------> zero or more of any character
    | |  +---------> any digit
    | +------------> begin group  
    +--------------> zero or more of any character

这将为您提供任意数字(包括零)字符,然后是一个由单个数字和任意数量的字符组成的组。该组重复了五次。

这将匹配其中包含五位或更多位数的任何字符串,以及其他任何内容。

如果要限制其他字符的内容,请使用.以外的其他字符。例如,alphas只会是:

[A-Za-z]*([0-9][A-Za-z]*){5}

答案 1 :(得分:3)

编辑:我从对paxdiablo的回答的评论中提出你的建议:这个正则表达式现在为“其他”字符的数量实现了5的上限:

^(?=(?:[A-Z/]*\d){5})(?!(?:\d*[A-Z/]){6})[\dA-Z/]*$

将匹配并返回一个字符串,该字符串至少包含五位数字以及零个或多个“其他”允许字符A-Z/。不允许使用其他字符。

<强>解释

^          # Start of string
(?=        # Assert that it's possible to match the following:
 (?:       # Match this group:
  [A-Z/]*  # zero or more non-digits, but allowed characters
  \d       # exactly one digit
 ){5}      # five times
)          # End of lookahead assertion.
(?!        # Now assert that it's impossible to match the following:
 (?:       # Match this group:
  \d*      # zero or more digits
  [A-Z/]   # exactly one "other" character
 ){6}      # six times (change this number to "upper bound + 1")
)          # End of assertion.
[\dA-Z/]*  # Now match the actual string, allowing only these characters.
$          # Anchor the match at the end of the string.

答案 2 :(得分:2)

您可能想尝试计算数字。我觉得它比编写复杂的正则表达式更清晰。

>> "ABC12345".gsub(/[^0-9]/,"").size >= 5
=> true

上面说的是用所有的东西代替数字,然后找出那些剩余的长度。你可以使用自己选择的语言做同样的事情。最基本的方法是迭代你拥有的字符串,计算每个字符是一个数字,直到它达到5(或不是)并相应地做事。