簡體   English   中英

使用正則表達式進行驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM