2015-03-05 5 views
2

Я пытаюсь заставить эти строки регулярных выражений работать, но они, похоже, не работают (я не могу распечатать «совпадения».Попытка проверить, содержит ли строка специальные символы или нижний регистр java

Моя цель - прочитать в строке из Сканера и затем запустить эту функцию. Если строка имеет либо строчные значения, либо специальные символы, тогда я хочу вызвать недопустимую функцию, а затем вернуть значение NULL. Тогда в методе isValid() я будет иметь его вернуть ложь и конец.

, если он содержит ЧИСЛО и прописные символы только я хочу, чтобы вернуть строку, как это так, что может делать другие вещи.

Кажется, я не могу распечатать «матчи». Я уверен, что я делаю это правильно, и это действительно расстраивает меня, я проверял форумы по-разному, но никто, похоже, не работает.

Спасибо за помощь.

public static String clean(String str){ 

    String regex = "[email protected]#$%^&*:;<>.,/}{+"; 
    if (str.matches("[" + regex + "]+")){ 
     printInvalidString(str); 
     System.out.println("matches"); 
    } else{ 
     return str; 
    } 

    return null; 
} 

public static boolean isValid(String validationString){ 

    //clean the string 
    validationString = clean(validationString); 
    if (validationString == null){ 
     return false; 
    } 

ответ

4

matches попытается соответствие с start из string.If в start нет lowercase или Special characters он будет fail .Использование .find или просто сделать положительное утверждение.

^[A-Z0-9]+$ 

Если это passes с matches ИТС действительным струнной для вас.

+0

Я думаю, что еще одна проблема в том, что символ '^ 'должны быть экранированы даже между кронштейнами –

+1

@Pablo это не обязательно, если только это не первый символ. – assylias

-1

Ваше регулярное выражение будет соответствовать строке только имеет недопустимые символы. Таким образом, строка с допустимыми и недопустимыми символами не будет соответствовать регулярному выражению.

Проверка строк будет проще:

if (str.matches([\\dA-Z]+)) return str; 
else printInvalidString(str); 
0

рядом проверяя строку с длинным рисунком вы можете проверить, если содержать прописные или числа я переписать функцию следующим образом:

public static String clean(String str) { 

    //String regex = "[email protected]#$%^&*:;<>.,/}{+"; 
    Pattern regex=Pattern.compile("[^A-Z0-9]"); 
    if (str.matches(".*" + regex + ".*")) { 
     printInvalidString(str); 
     System.out.println("matches"); 
    } else { 
     return str; 
    } 

    return null; 
} 
2

Для номера совпадений и символы верхнего регистра используют только:

^[\p{Lu}\p{Nd}]+$ 

`^`  ... Assert position is at the beginning of the string. 
`[`  ... Start of the character class 
`\p{Lu}` ... Match an "uppercase letter" 
`\p{Nd}` ... Match a "decimal digit" 
`]`  ... End of the character class 
`+`  ... Match between 1 and unlimited times. 
`$`  ... Assert position is at the end of the string. 

Экранированный Java строку версии
из: [email protected]#$%^&*:;<>.,/}{+
является: "[email protected]#\\$%\\^&\\*:;<>\\.,/}\\{\\+"

Смежные вопросы