请教一个验证密码的正则表达式.

特殊字符: `~!@#$%^&*()+[]{}:<>?_-

1.输入的密码中必须是上面特殊字符串的子集,且连续特殊字符不能超过5个

2.输入的密码中必须有大小写字母和数字

1.变态 ……
/^[`~!\@#\$\%^&*()+\[]{}:<>\?_-]{0,5}(\w+[`~!\@#\$\%^&*()+\[]{}:<>\?_-]{0,5})+\w*$/

2.得三个正则都匹配:
/[a-z]/
/[A-Z]/
/\d/

[code="ruby"]

Regexp.escape('~!@#$%^&*()+\[]{}:<>?_-')
=> "
~!@\#\$%\^&\*\(\)\+\\\[\]\{\}:<>\?_\-"

[/code]

to hooopo:escape 好像有问题 …… 得全部添加斜线

[code="ruby"]'`~!@#$%^&*()+[]{}:<>?_-'.each_char.inject(''){|z,c|z+'\'+c}[/code]

没问题的。我在1.8.6上测试结果:
[code="irb"]

reg_str = Regexp.escape('~!@#$%^&*()+\[]{}:<>?_-')
=> "
~!@\#\$%\^&\*\(\)\+\\\[\]\{\}:<>\?_\-"
reg = Regexp.new(/[#{reg_str}]+/)
=> /[~!@\#\$%\^&\*\(\)\+\\\[\]\{\}:<>\?_\-]+/
'
~!@#$%^&*()+[]{}:<>?_-' =~ reg
=> 0

[/code]

果然没事 ... 昨天不知道什么地方出错了 - - 迷糊

:wink: rz