我想实现以下验证。匹配至少5
个数字以及其他一些字符(例如字母和斜杠)。例如12345
,1A/2345
,B22226
,21113C
都是有效组合。但1234
,AA1234
不。我知道{5,}
给出了最少的出现次数,但我不知道如何处理其他字符。我的意思是[0-9A-Z/]{5,}
不起作用:(。我只是不知道将其他字符放在正则表达式中的哪个位置。
提前致谢!
祝你好运, 斯托
答案 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(或不是)并相应地做事。