我有这个经常性的表达
/^[A-Za-z0-9_-]{6,30}$/
我想修改它以验证密码至少有一个大写字母
我试过在A-Z +之后放一个+号,但是没有用
/^[A-Z+a-z0-9_-]{6,30}$/
请帮帮我吗?
答案 0 :(得分:0)
您可以使用:
/^(?=.*?[A-Z])[\w-]{6,30}$/
这里(?=.*?[A-Z])
是一个积极的前瞻,确保你的正则表达式至少有一个大写英文字母。
另请注意,\w
与[a-zA-Z0-9_]
相同。
答案 1 :(得分:0)
很抱歉,但我对正则表达式的预测非常糟糕,但我想提供另一种解决方案,这是单线:
# Data:
passwords = %w(
tlkjadfjklk
asdfkjlaj3223$%^&*
kljjkl32jklfa%^
ABCDLK233223
Aiou34i^&*
23fsaAiou34i^&*
kljasf90843klj3()*Dlkjafa323
klAjasf90843klj3()*Dlkjafa323
A
ABCDEF
klAjasf90843klj3klAjasf90843klj3klAjasf90843klj3)
# Code:
passwords.each{|pwd| p [/^(.*?[A-Z]+)/, /[A-Z]+(.*?)$/].inject(0){|sum, regex| sum += regex.match(pwd) ? $~[1].size : 0}.between?(6, 30)}
# Results:
false
false
false
true
true
true
true
true
false
true
false
为了清楚说明,请查看以下扩展版本的单行:
regex_begin = /^(.*?[A-Z]+)/
regex_after = /[A-Z]+(.*?)$/
passwords.each do |pwd|
len = [regex_begin, regex_after].inject(0) do |sum, regex|
sum += regex.match(pwd) ? $~[1].size : 0
end
p len.between?(6, 30)
end