簡體   English   中英

Java中的UNICODE正則表達式

[英]UNICODE Regex in java

在組合的正則表達式中,它看起來像在工作,並且在模式中使用它時失敗了。 請幫忙。

^(?=.*\\p{Nd})(?=.*\\p{L})(?!.*(.{2,})\\1).{5,12}$

這似乎正在工作,但當我拆分時失敗了。

^(?=.*\\p{Nd})(?=.*\\p{L})

我也在尋找UNICODE驗證,以忽略任何特殊字符,只接受字母/字母和數字的混合(至少一個字母和一個數字)

public void setValidations(){
        validation1 = "^(?=.*\\p{Nd})(?=.*\\p{L})"; //this is failing
        validation2 = "^.{5,12}$";
        validation3 = "(\\S+?)\\1";
        p1 = Pattern.compile(validation1);
        p3 = Pattern.compile(validation3);
    }
    public boolean validateString(String str){
        matcher1 = p1.matcher(str);
        matcher3 = p3.matcher(str);
        if(matcher1.find()){ //Expecting string passed "invalid" to fail (no numeric in it)
            System.out.println(str + " String must have letters & number at least one");
            return false;
        }
        if (!str.matches(validation2)){
            System.out.println(str  + " String must be between 5 and 12 chars in length");
            return false;
        }
        if (matcher3.find()){
            System.out.println(str + " got repeated: " + matcher3.group(1) + " String must not contain any immediate repeated sequence of characters");
            return false;    
        }
        return true;
    }
public static void main(String[] args) {
    StringValidation sv = new StringValidation();
    String s2[] = {"1newAb", "A1DOALDO", "1234567AaAaAaAa", "123456ab3434", "$1214134abA", "invalid"};
    boolean b3;
    for(int i=0; i<s2.length; i++){
       b3 = s2[i].matches("^(?=.*\\p{Nd})(?=.*\\p{L})(?!.*(.{2,})\\1).{5,12}$");

       System.out.println(s2[i] +  "  "+ b3); // string "invalid" returning false (expected)
    }
    for (String str : s2) {
            if(sv.validateString(str))
                System.out.println(str + "String is Valid");
    }
}

我也想讓“ $ 1214134abA”這個字符串失敗,因為它有$

似乎您忘記了使用否定

if(matcher1.find()){ //Expecting
    ... 
    return false;
}

它應該返回false,如果它不會找到匹配。 試試看

if(!matcher1.find()){ //Expecting...

另外,由於您想檢查整個字符串是否以字母和數字而不是.{5,12}為基礎,因此請嘗試[\\\\p{L}\\\\p{Nd}]{5,12}

Pattern.compile("^(?=.*\\\\p{Nd})(?=.*\\\\p{L})").matcher("invalid").find()返回false,因為"invalid"不包含數字。 因此, if條件條件評估為false,則跳過該塊。

使用^(?=[\\\\p{Nd}\\\\p{L}]*\\\\p{Nd})(?=[\\\\p{Nd}\\\\p{L}]*\\\\p{L})避免使用字母和數字以外的字符。

它將不接受$1214134abA因為其中包含$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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