2015-03-23 2 views
1

Я разрабатываю приложение для Android, где я должен проверять пароль. Ниже приведены строки кода, которые я использовал для проверки, но я не смог получить требуемую проверку.Проверка пароля Android

Мое требование: нужно быть разобраны таким образом, что она занимает по меньшей мере один специальный символ, одну цифру и все алфавиты от AZ, AZ Строка .. Пожалуйста, помогите мне в получении требуемой выходной мощности ..

public static boolean isAlphaNumericPwd(String name) { 
     return name.matches("^[a-zA-Z0-9]*$"); 
    } 

    public static boolean isSpecialPwd(String name) { 
     return name.matches("[email protected]#$*()?,."); 
    } 

ответ

5

Ваше регулярное выражение не будет работать на то, что вы пытаетесь сделать. Во-первый я укажу этот вопрос, а затем ниже я покажу вам, что вы должны делать:

"^[a-zA-Z0-9]*$" 

Это выше регулярное выражение выглядит для всей строки, в которой только буквы (заглавные & строчных букв) аз существуют и/или числа существуют. Поскольку вы используете стартовые и конечные якоря (^ - start anchor, $ - end anchor), вы говорите, что ENTIRE пароль должен содержать ТОЛЬКО эти значения. Подстроки не будут считаться совпадением из-за этих якорей.

Регулярное выражение, которое вы используете для проверки специальных символов, также не будет работать, потому что вы не избегаете зарезервированных символов регулярного выражения, и даже если бы вы были, это выглядело бы ТОЛЬКО шаблоном [email protected]#*()?,. в этом порядке в подстроке.

Символ * зарезервирован для ноль или более символов предыдущего символа (#). Символ ? зарезервирован для представления нуля или одного из предшествующих символов, поэтому вы проверяете это) может или не может существовать. Тогда. символ означает ЛЮБОЙ символ. Если вы хотите, чтобы это было точное выражение, которое вы должны были бы избежать его, как, например:

"[email protected]#$\*()\?,\." 

однако, что до сих пор не решит проблему, потому что это будет соответствовать, что набор символов, в этом порядке.

Похоже, вы просто хотите проверить, есть ли буквы, хотя бы одно число и, по крайней мере, один специальный символ. В этом случае вы не можете использовать только одно регулярное выражение ... то есть, если вы хотите использовать regex для этого.

public static boolean validatePassword(String pswd) { 
    //check that there are letters 
    if(!pswd.matches("[a-zA-Z]+")) 
     return false; //nope no letters, stop checking and fail!    
    //check if there are any numbers 
    if(!pswd.matches("[0-9]+")) 
     return false; //nope no numbers, stop checking and fail! 
    //check any valid special characters 
    if(!pswd.matches("[.!#*()?,]+")) 
     return false; //nope no special chars, fail! 

    //everything has passed so far, lets return valid 
    return true; 
} 

В моем примере обратите внимание, что каждое выражение не содержит каких-либо якорей. Это потому, что нам все равно, где символы находятся в строке, просто они существуют. Я также НЕ использовал *, потому что это потенциально может означать нуль, но вместо этого используется символ +, так как это означает, что когда-либо один раз. Наконец, обратите внимание, что все они помещены в скобки, это означает, что они являются классами символов, поэтому мы хотим, чтобы один символ соответствовал любому из этих значений. Затем + работает над классом символов в целом, вместо одного символа. Кроме того, в классе символов вам не нужно избегать (большинство) зарезервированных символов, потому что они имеют различное (или нет) значение внутри этой конструкции.

С учетом сказанного им следует помнить, что это не хорошие требования к паролю, но это должно по крайней мере указывать вам в правильном направлении, как вы будете использовать этот метод проверки.