我會單獨驗證所有這些東西。這將使所有驗證更簡單,更易於理解和維護。
另外你會知道哪些約束被違反,所以你可以向用戶報告更準確的錯誤(例如「密碼太短」而不是「你的密碼應該驗證以下約束:....」)。
- 長度:使用
String.length()
- 允許字符:使用一個正則表達式:
"^[a-zA-Z[email protected]\\.-]*$"
非重複和無n遞增:正則表達式並不意味着這一點。正如在評論中提到的那樣,我會去進行自定義驗證(迭代輸入字符,檢測常量並增加字符序列)。這樣的東西應該工作:
public boolean isBad(String test) {
int repeating = 0;
int incremental = 0;
for (int i = 1; i < test.length(); ++i) {
char prev = test.charAt(i - 1);
char curr = test.charAt(i);
if (prev == curr) {
repeating++;
} else {
repeating = 0;
}
if (curr - prev == 1) {
incremental++;
} else {
incremental = 0;
}
if (repeating == 3) {
System.out.println("too many repeated " + curr);
return true;
}
if(incremental==3){
System.out.println("incrementing sequence");
return true;
}
}
return false;
}
網址友好:你把字符集(字母數字和一些符號)的極限應該是足夠
我建議使用正則表達式只驗證長度和允許的字符,然後使用自定義Java函數掃描重複或遞增字符(如果輸入通過正則表達式)。除非通過遞增字符列出所有可能的字符串,否則正則表達式無法識別增量字符。 –
「URL(HTTP-POST)友好」是什麼意思?這不僅僅是基於什麼字符是允許的,你已經列出了?無論如何,最好不要基於URL友好性來限制用戶名,而應該在生成URL之前調用URL編碼函數(將特殊字符更改爲像%xx這樣的實體),並在URL生成時調用URL解碼函數解釋URL。 –
你不能做那種非增量的事情。正則表達式不是那樣的。 –