今天無意間翻了一下之前練習的小專案,以前在課程中接觸Ruby時曾有個挑戰作業是利用ruby去判斷使用者輸入的密碼是否符合以下規則^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}$
- 長度介於7~13
- 包含一個大寫以及一個小寫
當時的做法較為單純,是助教提供的(Ruby寫法)
puts "Please enter the password you would like to use:"
status = false
while status == false
password = gets.chomp
if password.length < 7 || password.length > 13
puts "Your password should be between 7 - 13 characters!"
elsif password == password.upcase
puts "Your password should contain lower case!"
elsif password == password.downcase
puts "Your password should contain upper case!"
else
status = true
puts "Your password is ready!"
end
end
這個做法中判別是否使用大小寫的寫法很有意思,我印象一直很深刻,如果要使用js寫的話,大概會變成像是這樣的東西。
const password = 'dannywang'
if (password.length > 13 || password.length < 7) {
console.log('your password must be between 7-13 letters')
} else if (password === password.toUpperCase()) {
console.log('your password must contain a lowercase letter')
} else if (password === password.toLowerCase()) {
console.log('your password must contain a uppercase letter')
} else {
console.log('Okay')
}
當然password的部份就透過DOM操作去取值就是了~
這時候就突然想到以前同一班的同學曾經想過用regrex去解決這樣的問題
今天去找就找到了很有意思的東西。
const regrex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{7,13}$/
const password = 'dannywang'
console.log(regrex.test(password)) // flase
簡單有效的做法,裡面有一個陌生的語法(?=.) 這個語法僅作為判斷式,不占任何字符
確認滿足條件之後才會繼續往右走
所以依序拆解上面的正規式便是:
字串必須包含數字->必須包含小寫字母->必須包含大寫字母->字串介於7~13字元間
挺有意思的東西! 看來我對正規式還不夠熟練~!
參考文章
使用 Regular Expression 驗證密碼複雜度
最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等