0

我需要在 Ruby 中验证密码,要求密码必须至少包含一个字母 ( /[a-z]{1,}/) 和一个数字 ( /\d{1,}/)。但是这些可以在字符串中以任何顺序出现。我可以在一个正则表达式中做到这一点吗?

'aa' => should not match
'99' => should not match
'a9' => should match
'9a' => should match

这些不起作用

'9a' =~ /[a-b]{1,}\d{1,}/  <= no match
'a' =~ /[a-b]{1,}|\d{1,}/  <= match

不幸的是,我找不到与(OR)运算&符对应的(AND)运算符之类的东西|有没有办法做到这一点?

4

3 回答 3

2

你可以这样做:

/(?=.*[a-z])(?=.*\d)/
于 2012-09-19T16:32:01.693 回答
1

你可以写:

'9a' =~ /[a-z].*\d|\d.*[a-z]/

但我可能只是硬着头皮把它写成两个正则表达式:

'9a' =~ /[a-z]/ && '9a' =~ /\d/

编辑添加:或者,从我对奥马尔杰克曼的回答的评论中,您可以写:

'9a' =~ /^(?=.*?[a-z]).*?\d/

使用零宽度正向超前断言 (?=...)

于 2012-09-19T16:30:19.927 回答
0

这适用于您的所有情况:

([a-zA-Z]+\d+|\d+[a-zA-Z]+)

我还添加了大写字母,因为您没有仅指定小写字母。

于 2012-09-19T16:31:26.630 回答