Проверьте ввод пользователя для номера социального страхования в Java - PullRequest
0 голосов
/ 24 января 2019

Я хочу проверить формат номера социального страхования при инициализации объекта или использовании установщика для изменения значения этого объекта после его создания. Очевидно, что это будет сделано с помощью оператора if и строки регулярного выражения, но я не знаю, как это сделать в Java.

Я нашел это выражение на другом сайте:

Regex : ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$ 

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

setSocNum(String x){

if (![regex here]){
System.out.println("please enter a valid social security number")
}
}

Я не могу сказать, как проверить строку регулярного выражения. Если кто-то может помочь мне с синтаксисом здесь, я мог бы легко адаптировать его к другим частям класса, над которым я работаю. Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вы можете использовать Pattern для сопоставления строки с регулярным выражением.

    private static Pattern socSecPattern = Pattern.compile("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$");

    private void setSocNum(String x){
        if (!socSecPattern.matcher(x).matches()){
            System.out.println("please enter a valid social security number")
        }
    }

Рекомендуется иметь переменную Pattern как статическую, так как она будет вызываться много раз.

0 голосов
/ 24 января 2019

Вот значение этого шаблона: ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$

  • (?!000|666): загляните в предоставленную строку и убедитесь, что она не имеет 000 или 666. Если вы найдете эти шаблоны, то не пройдете сравнение - верните неверный ввод.

  • [0-8][0-9]{2}-: ожидается три цифры, за которыми следует -, где первая находится в диапазоне от 0 до 8, а две другие находятся в диапазоне от 0 до 9

  • (?!0000) Подобно первому, посмотрите в будущее и убедитесь, что этот шаблон 0000 не существует, иначе не пройдете проверку

  • [0-9]{4}: ожидается четыре цифры в диапазоне от 0 до 9

Что касается ^ и $, они соответствуют началу и концу строки соответственно.

Надеюсь, это поможет.

0 голосов
/ 24 января 2019

Вы можете использовать класс Pattern из java и использовать его метод matches, который принимает два аргумента, первый из которых - это упомянутое вами регулярное выражение, а второй - строку, и он возвращает значение boolean который покажет, соответствует ли строка регулярному выражению или нет. Вот пример кода для того же,

String input = "somedata";
Pattern.matches("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$", input);

Ваш метод должен выглядеть примерно так:

public void setSocNum(String x) {

    if (Pattern.matches("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$", x)) {
        System.out.println("please enter a valid social security number");
    }
    // further logic goes here
}

Создание объекта Pattern тяжело, поэтому, если вы намереваетесь использовать код, для которого он вызывается много раз, вы должны создать его один раз и использовать повторно, избегая повторного создания его снова и снова.

Вот объяснение регулярного выражения:

^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
  • ^ - начало строки
  • (?!000|666) - Это отрицательный взгляд вперед означает, что совпадение будет неудачным, если строка начинается с 000 или 666
  • [0-8] - Затем сопоставьте и используйте следующую цифру, если она находится в диапазоне от 0 до 8
  • [0-9]{2} - Затем сопоставьте и используйте следующие две цифры, где [0-9] означает любую цифру, которую вы также можете кратко записать как \d
  • - - Затем следует дефис
  • (?!00) - этот отрицательный взгляд вперед отклоняет совпадение, если следующие две цифры 00
  • [0-9]{2} - затем следующий он совпадает и использует любые две цифры
  • - - Затем снова следует дефис
  • (?!0000) - этот отрицательный взгляд вперед отклоняет совпадение, если следующие четыре цифры 0000
  • [0-9]{4} - затем следующий он совпадает и использует любые четыре цифры
  • $ - конец строки

Надеюсь, мое объяснение понятно. Дайте мне знать по любым вопросам.

Вот код, который я предложил в своем комментарии,

public static Pattern SOCIAL_SECURITY_NUM_PAT = Pattern.compile("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$");

public static boolean isValidSocialSecurityNumber(String input) {
    return SOCIAL_SECURITY_NUM_PAT.matcher(input).matches();
}

Вы можете поместить этот код в некоторый класс, например SocialSecurityUtils.java, и вызывать его из любого места, используя SocialSecurityUtils.isValidSocialSecurityNumber("socialsecuritynumber")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...