在許多情況下,要求用戶的必須符合規則:包含數字,小寫英文字母,大寫英文字母,特殊字符~!@#$%^&之一,且長度必須>=6
有許多方法,其中一個是正則表達式.
在java中使用正則表達式,並不是很方便,最后還是使用:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
具體代碼如下(此處沒有檢驗長度,只是檢驗是否包含特定字符):
/** * @author lzf * @created on 2019年10月24日 下午2:48:38 * @功能 判斷密碼是否都包含了 數字,小寫英文字母,大寫英文字母,特別符號(~!@#$%^&*_) * @param passwd 明文密碼字符串 * @return 如果都包含,則返回true,否則返回false.. */ private boolean isPassWordValid(String passwd){ String regExpS="(?<one>[0-9])|(?<two>[a-z])|(?<four>[A-Z])|(?<three>[~!@#$%^&*_])"; Pattern r = Pattern.compile(regExpS); Matcher isMatch = r.matcher(passwd); boolean isFindNumberOk=false; boolean isFindSmallAlphabetOk=false; boolean isFindBigAlphabetOk=false; boolean isFindSpecialSymblOk=false; while (isMatch.find()){ String one=isMatch.group("one"); if (one!=null && isFindNumberOk==false){ isFindNumberOk=true; } String two=isMatch.group("two"); if (two!=null && isFindSmallAlphabetOk==false){ isFindSmallAlphabetOk=true; } String three=isMatch.group("three"); if (three!=null && isFindSpecialSymblOk==false){ isFindSpecialSymblOk=true; } String four=isMatch.group("four"); if (four!=null && isFindBigAlphabetOk==false){ isFindBigAlphabetOk=true; } //System.out.println(one+"--"+two+"----"+three+"----"+four); } if ( isFindNumberOk && isFindSmallAlphabetOk && isFindBigAlphabetOk && isFindSpecialSymblOk){ return true; //System.out.println("在字符串["+srcStr+"]中發現了數字、小寫字母、大寫字母和特定符號"); } else{ return false; } }
上面的代碼,可以滿足結果,但不是很高效,甚至特定情況下,不如逐個分析字符串來得高效。不過用於驗證密碼輸入是否滿足規則的業務通常對性能要求不高,所以也可以將就!