2013-12-20 3 views
0

Как выполнить проверку пароля, чтобы узнать, есть ли номер? У меня есть проверка на на длину, но для пароля также требуется номер, как это сделать? Я знаю, что это как-то связано с классом char и петлей, но все, что я пробовал, привело меня к стене. Любые советы помогут.Как выполнить проверку пароля, чтобы узнать, есть ли номер?

import javax.swing.JOptionPane; 
public class Pasword 
{ 
    public static void main(String[] args) 
    { 
     String password1 = JOptionPane.showInputDialog(null, "Please Enter A Password That Contains 6 - 10 Characters One Of Which Is A Number"); 
     int len = password1.length(); 

     while((len < 6) || (len > 10)) 
     { 
      password1 = JOptionPane.showInputDialog(null, "! INVALID !Please Enter A Password That Contains 6 - 10 Characters One Of Which Is A Number"); 
      len = password1.length(); 
     } 

     String password2 = JOptionPane.showInputDialog(null, "!PASSWORD VALIDATOR! Please Re-Enter Password"); 
     int len2 = password2.length(); 

     while((len2 < 6) || (len2 > 10)) 
     { 
      password2 = JOptionPane.showInputDialog(null, "! INVALID !Please Re-Enter"); 
      len2 = password2.length(); 
     } 
       if(password1.equals(password2)) 
       { 
        JOptionPane.showMessageDialog(null, "Accepted"); 
       } 
       else 
       { 
        JOptionPane.showInputDialog(null, "Passwords do not match, Pleas Re-enter"); 
       } 

    } 

} 

Я новичок в java и многому научился об этом, у меня просто возникла проблема с внедрением знаний. Спасибо

+2

Прочтите javadoc String и найдите метод, позволяющий получить символы в строке. Затем прочитайте javadoc Character и найдите метод, позволяющий узнать, является ли символ цифрой. Затем используйте цикл. –

ответ

0

Вы можете Переберите каждый символ, чтобы проверить, если это цифра:

boolean hasNumber = false; 
for (int i = 0; i < len; ++i) { 
    if (Character.isDigit(password1.charAt(i)) { 
     hasNumber = true; 
     break; // no need to keep searching 
    } 
} 
if (!hasNumber) { 
    // password1 does not contain a number 
} 

Или вы могли бы использовать String#matches:

if (!password1.matches(".*\\d.*")) { 
    // password1 does not contain a number 
} 
+1

«! Password1.matches (« \\ d ») неверно. –

+0

Второй пример неверен. '! password1.matches (" \\ d ")' будет соответствовать только следующим строкам: "0", "1", "2", "3", .., "9". Потому что это означает, что строка имеет длину 1 символ, а символ - цифра. – ChristopherZ

+0

Извиняюсь, я исправил регулярное выражение. – megaflop

2

Я хотел бы использовать некоторые регулярные выражения.

System.out.println("x123".matches("(.*?)\\d(.*?)")); 
System.out.println("xyz".matches("(.*?)\\d(.*?)")); 
+0

Вы, вероятно, имели в виду '(. *)' Not '(. *?)', Но вам все равно не нужно '. *' В regex. '" ab12ab ".matches (" \\ d ")' вернет true, поскольку он ищет одну цифру в любом месте строки. – megaflop

+1

@daiscog Нет, вы ошибаетесь. И я имел в виду то, что написал. –

+0

Нет, я не. Я использую регулярные выражения каждый день. '^. * \\ d. * $' соответствует всей строке (обратите внимание на символы^и $). Кроме того, '. *' Означает ноль или более любого символа, поэтому '?' Не требуется (ZERO или больше, а не ONE или более). – megaflop

-1

преобразование строка пароль в межды, если есть ERREUR, то это не число

преобразовать строку в целое число использование PASSWD-номер = Integer.parseInt (ПАРОЛЬ-струнный)

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