Как проверить номер телефона, чтобы он не позволял все те же цифры, как 99999999999 или 11111111111 в Java - PullRequest
6 голосов
/ 21 октября 2010

как проверить номер телефона, чтобы он не позволял использовать те же цифры, как 99999999999 или 11111111111 в JAVA

благодаря Sunny Mate

Ответы [ 3 ]

15 голосов
/ 21 октября 2010

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

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

Невозможно программировать вокруг этого (кроме простых вещей, которые, как правило, непреднамеренные, ошибочно введенные опечатки и т. Д.).

9 голосов
/ 21 октября 2010

Следующее регулярное выражение:

^(\d)(?!\1+$)\d{10}$

соответствует 11-значным строкам, которые не имеют одинаковых цифр.

Демонстрационная версия:

public class Main {
    public static void main(String[] args) throws Exception {
        String[] tests = {
                "11111111111",
                "99999999999",
                "99999999998",
                "12345678900"
        };
        for(String t : tests) {
            System.out.println(t+" :: "+t.matches("(\\d)(?!\\1+$)\\d{10}"));
        }
    }
}

, которая производит:

11111111111 :: false
99999999999 :: false
99999999998 :: true
12345678900 :: true
5 голосов
/ 21 октября 2010

Этот код соответствует числам, по крайней мере, с 4 повторяющимися числами.(Вы можете изменить 3 в регулярном выражении, чтобы увеличить этот порог.)

Pattern sameDigits = Pattern.compile("(\\d)(\\1){3,}");

for (String num : new String[] {
        "11111",  // matches
        "1234",   // does not match
        "8584",   // does not match
        "999",    // does not match (too few repetitions)
        "9999"})  // matches

    if (sameDigits.matcher(num).matches())
        System.out.println("Same digits: " + num);
    else
        System.out.println("Not same digits: " + num);

Печать

Same digits: 11111
Not same digits: 1234
Not same digits: 8584
Not same digits: 999
Same digits: 9999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...