[英]Validation using Regex
我有一個驗證,String應該至少包含一個字母或number 。 它之間可以包含_或-作為可選字符。 該字符串應以字母或數字開頭和結尾。 我嘗試使用許多Regex ,但無法實現。 這是我的RegEx代碼:
public static boolean isValidURL(String inputString) {
try {
boolean isValid = true;
Pattern letter = Pattern.compile("[a-zA-z0-9]");
String restPattern = "^[a-zA-Z0-9]+[a-zA-Z0-9_\\-\\s]?[a-zA-Z0-9]+$";
Matcher hasLetter = letter.matcher(inputString);
if (hasLetter.find()) {
if (inputString.matches(restPattern)) {
isValid = true;
} else {
isValid = false;
}
} else {
isValid = false;
}
return isValid;
} catch (Exception e) {
throw e;
}
}
和我的單元測試 :
assertEquals(true, Validator.isValidURL("res"));
assertEquals(true, Validator.isValidURL("res_rer"));
assertEquals(true, Validator.isValidURL("res-rer"));
assertEquals(true, Validator.isValidURL("res232A"));
assertEquals(true, Validator.isValidURL("232DFA"));
assertEquals(true, Validator.isValidURL("23_323"));
assertEquals(true, Validator.isValidURL("23"));
assertEquals(true, Validator.isValidURL("A2s"));
assertEquals(false, Validator.isValidURL("_"));
assertEquals(false, Validator.isValidURL("-"));
assertEquals(false, Validator.isValidURL("@"));
assertEquals(false, Validator.isValidURL("@GR$"));
assertEquals(false, Validator.isValidURL("_GR_"));
assertEquals(false, Validator.isValidURL("GR_"));
assertEquals(false, Validator.isValidURL("GR_"));
assertEquals(true, Validator.isValidURL("s"));
assertEquals(true, Validator.isValidURL("4"));
最后兩個斷言失敗。 請幫我解決這個問題。
下面的正則表達式將允許一個或多個字母數字字符,並且也允許在字母數字字符之間-
或_
,但不允許在第一個或最后一個字符。
^[a-zA-Z0-9]+(?:[-_]+[a-zA-Z0-9]+)*$
如果您不希望連續的_
或-
則刪除非捕獲組中存在的字符類后的+
。
^[a-zA-Z0-9]+(?:[-_][a-zA-Z0-9]+)*$
這應將輸入限制為以字母數字開頭和結尾,並允許輸入中包含多個連續的-
和_
。
^[a-zA-Z0-9]++(?:[-_]++[a-zA-Z0-9]++)*+$
我將所有量詞所有格( ++
和*+
而不是+
和*
)所有,以禁止回溯。
^([a-zA-Z0-9]+[a-zA-Z0-9_\\-\\s]?[a-zA-Z0-9]+)|([a-zA-Z0-9])$
只需再添加一個或接受字母或數字的條件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.