Проверка номера телефона

  • 12
  • Недоступна
Метод checkTelNumber должен проверять, является ли аргумент telNumber валидным номером телефона. Критерии валидности: 1) если номер начинается с '+', то он содержит 12 цифр. 2) если номер начинается с цифры или открывающей скобки, то он содержит 10 цифр.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (167)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай26 уровень
12 июля, 07:31
Возможно решение не самое правильное, но зато понятное: Шаг 1. Проверяем на нулл и на длину строки Шаг 2. Проверяем регуляркой то, что символы в строке соответствуют задаче Шаг 3. Делаем новую строку через replaceAll чисто из цифр и проверяем что количество цифр соответствует нужному количеству при использовании + и без Шаг 4. Проверяем регуляркой только прядок следования символов, т.к. количество проверено выше
Валентин Смирнов23 уровень, Санкт-Петербург
4 июля, 18:42
И опять подвела спешка. Проверка на NULL должна быть! без нее код - 3 строчки. "
skybright30 уровень
25 июня, 21:00
Не обязательно пытаться записать в одну регулярку. Начать можно так:
if (telNumber==null) return false;
if (telNumber=="") return false;
if (telNumber.matches("\\w")) return false;
Дальше по всем условиям
Николай26 уровень
12 июля, 06:37
\w
означает любую букву, цифру или знак подчеркивания и в данном случае условие из строки 3 бессмысленно, т.к. это проверка того, что строка состоит из одного символа, лучше резать просто по длине строки.
Антон26 уровень, Москва
17 июня, 20:11
решило задачу 5490 =) сделал одной регуляркой через (regex)|(regex)|(regex)
Semen Skibin27 уровень
16 июня, 16:05
Сделал хорошую регулярку (не прошло) --> Проверил её на примере из условия(всё ок) --> Перечитал условие(вроде всё подходит,может слишком много от себя добавил...) --> Убрал всё лишнее(оставил только то, что просит валя) --> Всё равно не работает(полез в комментарии) --> Сделал проверки --> Принято Регулярка в помощь : "\\+?(\\d{2})?\\(?(\\d{3})\\)?(\\d{3}[-]?\\d{2}[-]?\\d{2})" Не забываем про проверку на null,empty и кол-во цифр(просто чтобы было) https://regexone.com -- лучшее обучение регуляркам(имхо) https://regexr.com -- если нужно потестить.
NewBuy23 уровень, Санкт-Петербург
28 июня, 04:51
Точное количество цифр необходимо только в круглых скобках, поэтому во всех других случаях указывать количество цифр в фигурных скобких излишне \\d{2})? Да и вот эту конструкцию \\(?(\\d{3})\\)? лучше заменить на (\\(\\d{3}\\))?
Dmitry Potamoshnev29 уровень, Москва
9 июля, 13:09
ппц ваше выражение противоречит условию, а валидатор крыса.... 1) если номер начинается с '+', то он содержит 12 цифр 2) если номер начинается с цифры или открывающей скобки, то он содержит 10 цифр Ваша регулярка без + пропускает 12 цифр, а валидатор крыса из-за которой я хотел решить с первой попытки без подсказок и убил из-за этого условия больше времени, чем надо было :(
Евгений36 уровень, Казань
5 июня, 20:17
Валидатор принимает с проверкой на null и чётким соответствием целиком строки (через метод matches) c 4-мя приведенными примерами, которые true (не все критерии валидности номера телефона, описанные словесно, приведены в примерах).
Александр26 уровень, Москва
3 июня, 12:03
Для тех кто сам решал и не смог решить, предлагаю такой вариант поразбираться: Делаем проверки: (^\+\d{12}|^\(?\d{10}) \+?[0-9]+\([0-9]{3}\)[0-9]+\d+ ^\+[0-9]+-[0-9]+-[0-9]+$ ^[0-9]+-[0-9]+$
REM27 уровень, Москва
2 июня, 16:31
стоило посидеть позамарачиваться с задачкой 2212, теперь понял суть и удобство регулярок и в какой момент проще сделать через цикл. В целом если не жалко времени и не спешить задачка шикарная, дает возможность разобраться в теме. Я вообщем заметил что спешу с изучением потому плохо усваиваю матерьял + появляется отторжение от учебы. А в спокойном режиме, все почитал, посмотрел, разобрался до конца, получил удовольствие и главное отложится!
Андрей24 уровень, Москва
14 мая, 22:09
Да, насчёт null в условии не указали, пришлось добавить проверку. А так решил через matches с рег выражением состоящим из двух половинок соединённых "ИЛИ". Ну и там внутри на нужных местах некоторые символы с вероятным количеством, где от 0 до 1.
Александр24 уровень, Санкт-Петербург
8 июля, 12:15
Ну, проверка на null уже должна быть по дефолту)) Считаю этот каприз валидатора оправданным, хотя сам всегда напарываюсь на это
Petrusiova30 уровень
29 апреля, 11:05
(!) Проверяем если номер == null , то вернуть false; далее проверяла на соответствие регулярке (мой вариант) если совпадает - boolean result = true; затем проверяем с помощью m.lookingAt(), если начинается с плюса, то удаляем все non-digit-ы (\\D) и считаем количество, если не равно 12 - boolean result = false; иначе если начинается с цифры или открывающейся скобки, так же удаляем все \\D и считаем, если не равно 10, то boolean result = false; return result;
Yaroslav Tolstik28 уровень, Минск
3 мая, 22:13
обидно) валик попросил помимо null еще и на "" проверить, ну и с двумя проверками не принял,ссылаясь что проверки на null он не видит если она не первая в списке, увидел только когда вынес ее отдельно первой))) просто так три попытки...