Комментарии 121
Я когда-то фильтр писал, так там делал проще, брал все цифры со строки, отрезал последних 9 (код и номер телефона), и дописывал спереди +380 (код Украины), и разбивал регекспом на секции вида +380 (XX) XXX-XX-XX. Но это для мобильных, для стационарных работать должен немного иначе.
Для поиска украинских телефонов во всех файлах (в том числе веб-страницах и Word-документах, в том числе в файлах с кодировкой UNICODE 16 бит) использовал такое:
"/(?<!\w)(?:(?:(?:(?:\+?3)?8\W{0,5})?0\W{0,5})?[34569]\s?\d[^\w,;(\+]{0,5})?\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d(?!(\W?\d))/x"
Для уменьшения уровня «шума» и снижения чувствительности {0,5} заменить на {0,3} (или еще меньше).
Этот шаблон так же вытаскивает семизначные номера (без кода города, подразумевая, что это Киев).
Основной отсев ведется по [34569].
"/(?<!\w)(?:(?:(?:(?:\+?3)?8\W{0,5})?0\W{0,5})?[34569]\s?\d[^\w,;(\+]{0,5})?\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d\W{0,5}\d(?!(\W?\d))/x"
Для уменьшения уровня «шума» и снижения чувствительности {0,5} заменить на {0,3} (или еще меньше).
Этот шаблон так же вытаскивает семизначные номера (без кода города, подразумевая, что это Киев).
Основной отсев ведется по [34569].
почему не указали что выражение работает только для российских телефонов?
В моём городе код города — 4 цифры, номер телефона — 6 цифр.
Ваш валидатор не пропускает такие номера. Есть города, где номер телефона состоит из 5-ти цифр.
Ваш валидатор не пропускает такие номера. Есть города, где номер телефона состоит из 5-ти цифр.
Всё нормально. Это синдом ДС.
Это не нормально. Но да, синдром ДС.
Сарказм, бро. Если серьёзно, то это частный случай и за такое бо-бо надо делать. Конечно, если ваш сайт не заблокирован для всех кроме мегаполисов с трехзначным кодом.
Простите, а чем ТС виноват что в вашем городе не семизначные номера телефонов?
И почему тогда только москвичи виноваты? В том же Санкт-Петербурге те же 7цифр плюс 812?
И почему тогда только москвичи виноваты? В том же Санкт-Петербурге те же 7цифр плюс 812?
В этом никто не виноват. Они просто есть. Но регулярное выражение в топике об этом не знает.
И где было хоть слово про москвичей? Почему вы стараетесь обвинить меня в том, чего не было?
И где было хоть слово про москвичей? Почему вы стараетесь обвинить меня в том, чего не было?
А «синдром ДС» в вашем комментарии тогда что значит? Washington DC?
Ну так может ТС нет необходимости не в семизначных номерах, поэтому он и не делал их обработку? Собственно в посте он об этом и говорит, но вам же надо написать про «синдром ДС»…
Ну так может ТС нет необходимости не в семизначных номерах, поэтому он и не делал их обработку? Собственно в посте он об этом и говорит, но вам же надо написать про «синдром ДС»…
«синдром ДС» намного более широкое выражение, чем «живет в Москве». Оно может означать, что автор не приемлит никаких стандартов, с которыми он может столкнуться, кроме своего города. Или неосознанно подразумевает, что его город — единственный в мире. Вот например, я бы сказала «встречаемся на метро Политех». И хотя имею ввиду Киев, петербуржане могут неправильно понять. Москва вообще не задействована. Но «синдром ДС» во всей красе.
У вас синдром ДС, вы же сразу не указали в каком городе и стране находится станция метро.
Спасибо, капитан! Об этом я и говорю!
А я говорю о том, что не надо тыкать этим «синдромом», его может и не быть изначально.
Писать на интернациональном сайте что-то подходящее под узкий круг городов, не указывая при этом перечень городов — не это ли «Синдром ДС»?
А вам в голову не приходило, что прежде чем писать что это «синдром ДС» можно автору сказать чтобы уточнил?
Потому что сразу орать про какие то синдромы выглядит как синдром «синдрома ДС»
Потому что сразу орать про какие то синдромы выглядит как синдром «синдрома ДС»
кол по троллингу
А вам не приходило в голову, что автор должен был подумать хоть немного при написании статьи?
О чем? ТС написал регулярку под свои задачи (7+3 телефоны), решил поделиться, ему что, обязательно надо было подумать что это не подойдет для 4+6 и 5+5 номеров и делать то, что выходит за рамки ЕГО задачи?
да
А если я напишу функцию, которая определяет, оканчивается ли строка $xxx строкой $yyy. Мне об этом тоже поделиться на Хабрахабр? ;)
Ну вот написал бы он для пятизначных и вы бы тут выступали, но ведь он не виноват что в Питере семизначные, да?
а что, за мкадом есть телефоны???
В моём варианте учтены такие города:
((8|\+7)-?)?\(?\d{3,5}\)?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})?
((8|\+7)-?)?\(?\d{3,5}\)?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})?
<regexp-nazzi>
Зачем вы пишите \d{1}?
Зачем у вас -?\d{1} повторяется 7 раз?
</regexp-nazzi>
Прочтите и не позорьтесь так — www.books.ru/shop/books/592346
Зачем вы пишите \d{1}?
Зачем у вас -?\d{1} повторяется 7 раз?
</regexp-nazzi>
Прочтите и не позорьтесь так — www.books.ru/shop/books/592346
В России междугородний телефон состоит из 10 цифр, всегда. Размера кода города варьируется в зависимости от длины номеров городских станций. Т.е. варианты могут быть разные.
Более того, код города и длина номеров ГТС может быть переменной длины в одном городе (5/5 или 4/6 точно знаю, что были не так давно и, наверное, есть до сих пор).
В России межгород НЕ ВСЕГДА из 10 цифр состоит.
Все зависит от того, через какого оператора производится дозвон (поскольку, с 1 января 2006 года абоненты имеют право самостоятельно выбирать, услугами какого оператора связи пользоваться).
Например, используя код МТТ (53) в Санкт-Петербург можно звонить так:
8-гудок-53-812-123-45-78
то есть набирается 12 цифр после 8.
Все зависит от того, через какого оператора производится дозвон (поскольку, с 1 января 2006 года абоненты имеют право самостоятельно выбирать, услугами какого оператора связи пользоваться).
Например, используя код МТТ (53) в Санкт-Петербург можно звонить так:
8-гудок-53-812-123-45-78
то есть набирается 12 цифр после 8.
Хм, я честно говоря не знаю, что это за особенность. Но разве номер абонента изменяется от такого набора? Номер абонента остается прежним, просто вызов пойдет по сетям определенного оператора(если я правильно понял смысл этой приставки).
Номер абонента: 123-45-78, а, все остальное — «приставки».
Дело не в этом. Просто, благодаря такой схеме адресации появляется возможность неограниченно наращивать номерную ёмкость конкретной телефонной станции (без применения добавочных номеров, набираемых уже после дозвона).
Компания МТТ просто пошла по пути наименьшего сопротивления, чтобы не заставлять своих абонентов запоминать сложные схемы переадресации, зарегистрировав на себя все «виртуальные» трехзначные коды «городов» 533, 534 и 538 (которые полностью покрывают территорию всей Российской Федерации с кодами городов 3хх, 4хх и 8хх), а, так же, коды 58х для для выхода на международные линии.
Другими словами, количество цифр в номере может зависеть и от кода города (особенно, виртуального).
То есть, набрав номер, 8-гудок-58-380-44-123-45-67 мы дозваниваемся до Киева (14 цифр после восьмерки), в самом же Киеве номера 7-значные.
Компания МТТ — не единственный оператор связи, владеющий «виртуальнми» кодами городов.
Есть компании, сдающие в «аренду» некоторые номерные пространства, и арендатор вправе по своему усмотрению произвольно «удлиннять» набираемый номер.
Дело не в этом. Просто, благодаря такой схеме адресации появляется возможность неограниченно наращивать номерную ёмкость конкретной телефонной станции (без применения добавочных номеров, набираемых уже после дозвона).
Компания МТТ просто пошла по пути наименьшего сопротивления, чтобы не заставлять своих абонентов запоминать сложные схемы переадресации, зарегистрировав на себя все «виртуальные» трехзначные коды «городов» 533, 534 и 538 (которые полностью покрывают территорию всей Российской Федерации с кодами городов 3хх, 4хх и 8хх), а, так же, коды 58х для для выхода на международные линии.
Другими словами, количество цифр в номере может зависеть и от кода города (особенно, виртуального).
То есть, набрав номер, 8-гудок-58-380-44-123-45-67 мы дозваниваемся до Киева (14 цифр после восьмерки), в самом же Киеве номера 7-значные.
Компания МТТ — не единственный оператор связи, владеющий «виртуальнми» кодами городов.
Есть компании, сдающие в «аренду» некоторые номерные пространства, и арендатор вправе по своему усмотрению произвольно «удлиннять» набираемый номер.
Я просто знаю, что все междугородние номера которые ставятся на контроль в сорме являются деситизначными, собственно поэтому я и стал утверждать то, что утверждаю. Я, лично, других междугородних номеров ни разу не видел, да и сорм делается по стандартам и приказам мин связи. Полным номером абонента который проходит по коммутаторам будет (код_города)(номер_абонента) все остальное будет отброшено(справедливо для транзита, местные абоненты по другому могут быть).
Ну а если перевести все это на тему топика, то абонент оставляет свой номер телефона, который никто оставлять не будет с префиксом маршрутизации оператора(в здравом уме :) ).
Безусловно, то о чем Вы говорите, может иметь место, но приставки о которых говорите Вы не являются префиксом дающим уникальность абонентского номера, в отличие от деситизначного номера, который идет вслед за ними. Т.е 10 знаков являются обязательными, а все остальное это некий добавочный «сахар».
Ну а если перевести все это на тему топика, то абонент оставляет свой номер телефона, который никто оставлять не будет с префиксом маршрутизации оператора(в здравом уме :) ).
Безусловно, то о чем Вы говорите, может иметь место, но приставки о которых говорите Вы не являются префиксом дающим уникальность абонентского номера, в отличие от деситизначного номера, который идет вслед за ними. Т.е 10 знаков являются обязательными, а все остальное это некий добавочный «сахар».
Компания МТТ через «префикс» строит всего лишь удобную схему для доступа к «мосту» между различными телефонными сетями (за счет переадресации вызова).
К сожалению они не делают переадресации с префиксом «53» на мобильные телефоны.
Просто я хотел себе на мобильник позвонить, и посмотреть, что по этому поводу скажет определитель номера.
Но ведь никто не заставляет «арендаторов» использовать арендуемые номера именно в качестве шлюза на другие номера (которые будут совпадать, даже, хотя бы, частично по последним семи цифрам).
Например, при желании можно «заполучить» номерок вида
8-5хх-1234567890123456789,
который можно будет запросто указывать в качестве контактного номера в любых анкетах, и до него реально будет дозвониться, и при этом, оригинальный номер, на который будет проводиться переадресация будет скрыт (ну или по крайней мере не будет жестко привязан к «длинному» номеру).
Кстати я очень часто звоню по «бесплатным» номерам вида 8-800-ххх-хх-хх, и при этом на экране телефона отображается номер на который идет переадресация.
К сожалению они не делают переадресации с префиксом «53» на мобильные телефоны.
Просто я хотел себе на мобильник позвонить, и посмотреть, что по этому поводу скажет определитель номера.
Но ведь никто не заставляет «арендаторов» использовать арендуемые номера именно в качестве шлюза на другие номера (которые будут совпадать, даже, хотя бы, частично по последним семи цифрам).
Например, при желании можно «заполучить» номерок вида
8-5хх-1234567890123456789,
который можно будет запросто указывать в качестве контактного номера в любых анкетах, и до него реально будет дозвониться, и при этом, оригинальный номер, на который будет проводиться переадресация будет скрыт (ну или по крайней мере не будет жестко привязан к «длинному» номеру).
Кстати я очень часто звоню по «бесплатным» номерам вида 8-800-ххх-хх-хх, и при этом на экране телефона отображается номер на который идет переадресация.
Кстати, да. Например у Кировска (Лен. область) код 81362, а номера 5-и значные
По заголовку подумал что пост будет об этом номере: 8 (495) 933-66-66
зачем изобретать велосипед? стоит покопаться в интернете и как минимум найти более эффективные регулярки, а у вас получилась регулярка для сотового телефона в большинстве своём
Затем, что существуют велосипеды различных марок и моделей. Есть Stels, а есть — Colnago.
Здесь — решение конкретной задачи: чтобы в форме проверялись телефоны, которые вводят клиенты. Телефоны, как вы правильно заметили, в основном ожидаются мобильные. Разумеется, я предварительно «покопался в интернете». Если есть более эффективное решение — пожалуйста, в студию. Я добавлю в пост.
Здесь — решение конкретной задачи: чтобы в форме проверялись телефоны, которые вводят клиенты. Телефоны, как вы правильно заметили, в основном ожидаются мобильные. Разумеется, я предварительно «покопался в интернете». Если есть более эффективное решение — пожалуйста, в студию. Я добавлю в пост.
Извините, но у вас велосипед марки «инвалидная коляска».
Ваше решение ужасно по многим пунктам, в т.ч. описанным в топикам.
Пользователь введёт телефон «8-926-123-45-67». И что ему сообщит? Что это неправильный номер? Но как это может быть неправильным номером, если ему только что на него звонила мама?
А то, что для вас не существует других телефонов кроме московских — тоже показательно.
И еще ваша регулярка всё-равно не защитит от таких значений, как «8(000)0000000»
Так что послушайте советов в топике — не делайте таких глупых проверок. Достаточно проверки на длину. Иначе просто потеряете потенциального клиента.
А во время ввода — автоматически подгонять формат к нужному.
Ваше решение ужасно по многим пунктам, в т.ч. описанным в топикам.
Пользователь введёт телефон «8-926-123-45-67». И что ему сообщит? Что это неправильный номер? Но как это может быть неправильным номером, если ему только что на него звонила мама?
А то, что для вас не существует других телефонов кроме московских — тоже показательно.
И еще ваша регулярка всё-равно не защитит от таких значений, как «8(000)0000000»
Так что послушайте советов в топике — не делайте таких глупых проверок. Достаточно проверки на длину. Иначе просто потеряете потенциального клиента.
А во время ввода — автоматически подгонять формат к нужному.
Спасибо, пофиксил.
То же самое вы могли сказать вот так: «Добавьте в тесты выражение 8-926-123-45-67».
Нуточка, совесть вы наша ) у каждой истории есть две стороны. Вторая — это обработка заявок отделом продаж.
То же самое вы могли сказать вот так: «Добавьте в тесты выражение 8-926-123-45-67».
Нуточка, совесть вы наша ) у каждой истории есть две стороны. Вторая — это обработка заявок отделом продаж.
Согласна с вами абсолютно =) Потому можно спросить у директора предприятия, что лучше — потерять одного потенциального клиента, или случайно пропустить в отдел продаж один несуществующий номер ;)
То же самое вы могли сказать вот так: «Добавьте в тесты выражение 8-926-123-45-67»
Тогда можно сказать ещё добавить в выражение следующие тесты:
8 927 1234 234
8 927 12 12 888
8 927 12 555 12
8 927 123 8 123
Люди чисто покупают телефоны с красивыми цифрами и потом недоумевают, почему их не принимают сайты =) На самом деле много еще вариантов можно придумать.
Обратите внимание, все телефоны — вполне реальны и за ними могут сидеть вполне реальные клиенты ;)
Не обижайтесь, ничего лично против вас не имею, но ведь ваша регулярка может оказаться на реальном сайте, на котором я не смогу ввести свой реальный телефон!
Глупства, пане, глупства.
По-моему, стоит просто приводить номер к «правильному» виду и показывать пользователю, чтобы тот мог что-то поправить, если что. А «не пущать» — порочная практика.
По-моему, стоит просто приводить номер к «правильному» виду и показывать пользователю, чтобы тот мог что-то поправить, если что. А «не пущать» — порочная практика.
Клиент всегда прав.
Такая вещь почти обязательна для компаний, которые тем или иным образом предоставляют операции с большими группами номеров.
Один пример: сервис смс рассылки. Пусть клиент загружает номера в любом виде, а в ответ ему сообщить что из вашей 1000 обработали 990 номеров (остальные вообще бред). Поверьте, у клиентов бывают базы в таком жутком виде!, а сам он недавно электронные таблицы освоил. Так что либо принимать такие номера, либо никакие
Такая вещь почти обязательна для компаний, которые тем или иным образом предоставляют операции с большими группами номеров.
Один пример: сервис смс рассылки. Пусть клиент загружает номера в любом виде, а в ответ ему сообщить что из вашей 1000 обработали 990 номеров (остальные вообще бред). Поверьте, у клиентов бывают базы в таком жутком виде!, а сам он недавно электронные таблицы освоил. Так что либо принимать такие номера, либо никакие
Ну, отвергать надо номера недостаточной длины. Точнее, не отвергать, а переформатировать и подсветить красным. И сообщить, что нифига они обработаны не будут, пока их не исправят.
Кстати, насчет электорнной таблицы верно подмечено:
помню, нужно было обработать несколько экселевских таблиц с кучей номеров телефонов, и я решил сохранить все в текстовом формате «csv».
В итоге я получил для номеров, которые были записаны без скобок, пробелов и минусов номера вида «8,92E+10» с которыми, конечно же бессмысленно было работать дальше.
помню, нужно было обработать несколько экселевских таблиц с кучей номеров телефонов, и я решил сохранить все в текстовом формате «csv».
В итоге я получил для номеров, которые были записаны без скобок, пробелов и минусов номера вида «8,92E+10» с которыми, конечно же бессмысленно было работать дальше.
Регулярное выражение не лучший способ, для разбора номера.
Особенно по скорости работы и разбора такого выражения другими программистами ;)
Особенно по скорости работы и разбора такого выражения другими программистами ;)
Я б предварительно почистил от лишних и множественных пробелов/табуляции/недопустимых символов и прочей нечисти, а потом уже валидировал
Поддерживаю. Тогда валидация оказывается очень простой, как ни странно.
Да, согласен, наверное, это самое эффективное решение.
К сожалению, я заранее отказался от него: некоторые посетители (например, конкуренты) злоупотребляют таким способом валидации и сознательно отправляют недопустимые символы в телефоне. Из опыта: такие заявки лучше всего просто фильтровать. Они тратят время и портят настроение отделу продаж.
К сожалению, я заранее отказался от него: некоторые посетители (например, конкуренты) злоупотребляют таким способом валидации и сознательно отправляют недопустимые символы в телефоне. Из опыта: такие заявки лучше всего просто фильтровать. Они тратят время и портят настроение отделу продаж.
Вы еще забыли про добавочные, которыми пользуются в больших организациях. Например, Иванов И.И. +7 812 123-4567 доб. 123.
Из одной регулярки сделали пост на главной?
Совсем не торт.
Совсем не торт.
> ^( +)?((\+?7|8) ?)?((\(\d{3}\))|(\d{3}))?( )?(\d{3}[\- ]?\d{2}[\- ]?\d{2})( +)?$
Простите, а как понимать номер 8 927 00 00?
Простите, а как понимать номер 8 927 00 00?
Клиенты пишут:
— 4951234567890 (и такой же, но на конце «1»)
— +74951234567890 (но у меня там денег нет обычно)
— и т. п.
Никто не будет карпеть над вашей формой, плюнут и пойдут к другому поставщику услуг. Достаточно написать пример правильного написания.
— 4951234567890 (и такой же, но на конце «1»)
— +74951234567890 (но у меня там денег нет обычно)
— и т. п.
Никто не будет карпеть над вашей формой, плюнут и пойдут к другому поставщику услуг. Достаточно написать пример правильного написания.
Это реальные примеры? О_о
Это типовые примеры клиентов, которые подают заявку на обучение по программам MBA и ВПО
— Место работы: на банке
— Место работы: госорган, Должность: госслужащая
— Место работы: санкт петербург, Должность: бухгалтер
— Должность: приемчик товара
— Должность: нету
Они пишут свое ФИО с маленькой буквы или капсом. А мы здесь хотим их заставить правильно вводить номера телефонов по регуляркам, ну что за.
— Место работы: на банке
— Место работы: госорган, Должность: госслужащая
— Место работы: санкт петербург, Должность: бухгалтер
— Должность: приемчик товара
— Должность: нету
Они пишут свое ФИО с маленькой буквы или капсом. А мы здесь хотим их заставить правильно вводить номера телефонов по регуляркам, ну что за.
ТС начал учить регулярные выражения?
и еще замечание, дефисоминусы можно не экранировать, а вместо пробелов использовать специальный символ \s.
И, как сказано выше, наверное в данном случае правильней, убирать все нечисловые символы, и потом проверять на длину.
И, как сказано выше, наверное в данном случае правильней, убирать все нечисловые символы, и потом проверять на длину.
post-address.ru/Default.aspx?tab=help_phone&mode=2&search=
просто и со вкусом. =)
и там не просто регулярка…
Велосипеды они нужны, но не в промышленных масштабах.
просто и со вкусом. =)
и там не просто регулярка…
Велосипеды они нужны, но не в промышленных масштабах.
УРА!!!
Давайте теперь для каждой тупой регулярки создавать новый пост на хабре!
Я удивляюсь тем, кто вывел его на главную.
Давайте теперь для каждой тупой регулярки создавать новый пост на хабре!
Я удивляюсь тем, кто вывел его на главную.
хабр уже не торт.
завтра на главной мы рискуем увидим посты о валидации емайлов и айпишников
завтра на главной мы рискуем увидим посты о валидации емайлов и айпишников
Регулярно появляются ведь!
Да было уже, правда там была «смерть регэкспам»
ну знааааете, пост про www.ex-parrot.com/pdw/Mail-RFC822-Address.html был бы очень неплох, мне кажется.
Если вы уверены, что на вашем сайте все номера должны будут иметь вид +7 (XXX) XXX-XX-XX, то имеет смысл просто выкидывать все символы кроме цифр и потом выводить как вам угодно.
А в случае, если вы работаете на уровне страны или всего мира, то без базы кодов городов не обойтись.
Вот это можно записать немного проще:
^((\+?7|8)[ \-] ?)?((\(\d{3}\))|(\d{3}))?([ \-])?(\d{3}[\- ]?\d{2}[\- ]?\d{2})$
[ \-] лучше заменить на [\s-] #символ '-' можно не экранировать если он идет последним
используя ' ' в регулярках вы закрываете себе возможность использовать многострочные regexp, поэтому лучше использовать \s
А в случае, если вы работаете на уровне страны или всего мира, то без базы кодов городов не обойтись.
Вот это можно записать немного проще:
^((\+?7|8)[ \-] ?)?((\(\d{3}\))|(\d{3}))?([ \-])?(\d{3}[\- ]?\d{2}[\- ]?\d{2})$
[ \-] лучше заменить на [\s-] #символ '-' можно не экранировать если он идет последним
используя ' ' в регулярках вы закрываете себе возможность использовать многострочные regexp, поэтому лучше использовать \s
А вы в курсе, что \d совпадает с юникодными цифрами? Например, с арабо-индийскими, вьетнамскими и т.п. Я бы заменил на [0-9].
В первоначальную маску так же успешно попадают:
8 (926 123-45-67
8 926) 123-45-67
8-926-123-45----
предложенный упрощенный вариант лишен этого деффекта.
8 (926 123-45-67
8 926) 123-45-67
8-926-123-45----
предложенный упрощенный вариант лишен этого деффекта.
Это всё здорово, но в чём суть поста? Если это действительно востребовано, то давайте поступим следующем образом: любой хабражитель отправит мне в инбокс пожелания по нужным ему рег. выражениям, а я их составлю и оформлю в один отдельной пост. И если в последующем будет потребность ещё в каких-то рег. выражения — я просто буду обновлять пост, добавляя нужное рег. выражение.
Идёт?)
Идёт?)
Возможно пригодиться и моя наработка в этой области кому-то. Конечно своеобразный костыль, но получилось что-то своеобразное:
vit1251.wordpress.com/2010/07/09/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%B0-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B0-%D0%B8%D0%BB%D0%B8-%D0%B2%D0%B2%D0%BE%D0%B4-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80/
vit1251.wordpress.com/2010/07/09/%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%B0-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B0-%D0%B8%D0%BB%D0%B8-%D0%B2%D0%B2%D0%BE%D0%B4-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80/
Думаю, если так важны валидные номера телефонов, то нужно
а) при внесении телефона форму использовать проверку только на правильность количества цифр. (т.е. минимум столько-то)
б) при необходимости проверить действительно ли этот номер телефона принадлежит владельцу — подтверждение с помощью смс.
Конечно, если ресурс серьезный — без базы не обойтись.
а) при внесении телефона форму использовать проверку только на правильность количества цифр. (т.е. минимум столько-то)
б) при необходимости проверить действительно ли этот номер телефона принадлежит владельцу — подтверждение с помощью смс.
Конечно, если ресурс серьезный — без базы не обойтись.
Регулярка ничо такая, но гораздо проще убрать всё кроме букв, проверить длину, проверить код (по желанию)
Сделал так:
'/^([0-9]){1,5}$/' — для кода страны и кода города (отдельно для каждого)
'/^([0-9]){3,10}$/' — для прямого номера
application form
(разрешены только цифры с проверкой по длине)
Мне казалось, максимально удобно, с подсказками и подсветкой красным полей, которые заполнены не правильно. Но, некоторые люди всеравно пытаются целый номер
вставить то в 4х символьное поле для кода страны, то в поле кода города и даже после подсветки и нескольких попыток сабмита формы несколько человек ушли, не пройдя этот этап из-за телефонного номера.
Думаю еще добавить примечание внизу страницы, как заполнять некоторые поля.
Вобщем, счс дорабатываю форму и буду признателен за комментарии по юзабилити.
'/^([0-9]){1,5}$/' — для кода страны и кода города (отдельно для каждого)
'/^([0-9]){3,10}$/' — для прямого номера
application form
(разрешены только цифры с проверкой по длине)
Мне казалось, максимально удобно, с подсказками и подсветкой красным полей, которые заполнены не правильно. Но, некоторые люди всеравно пытаются целый номер
вставить то в 4х символьное поле для кода страны, то в поле кода города и даже после подсветки и нескольких попыток сабмита формы несколько человек ушли, не пройдя этот этап из-за телефонного номера.
Думаю еще добавить примечание внизу страницы, как заполнять некоторые поля.
Вобщем, счс дорабатываю форму и буду признателен за комментарии по юзабилити.
Не знаю, какую истину нашёл автор, но номера с 4-значными кодами как не матчились, так и не матчатся.
Регулярка для валидации номера телефона на главной? Абсурд
регулярка найдёт и не корректные, ну на пример введя не 10 цифр, а 11, когда же в РФ всего 10 после восьмёрки.
вот так будет находить все номера, без разницы где стоят тире и скобки
m/^+?[78](?:[-()]*\d){10}$/
вот так будет находить все номера, без разницы где стоят тире и скобки
m/^+?[78](?:[-()]*\d){10}$/
Есть такой дивный сайтик slando.ru, где одному телефонному номеру запрещено продавать больше одной квартиры. Риелторы извращаются как могут.
Так ваши регулярки — просто детский лепет для тех телефонов, которые там указывают. Человек то их прочитает.
Так ваши регулярки — просто детский лепет для тех телефонов, которые там указывают. Человек то их прочитает.
если уж совсем подумать то лучше без регулярки, зачем валидировать телефон? Разве что смску скинуть уведомлением
Какие ожесточенные обсуждения… Ваш пост много кого не оставил равнодушным))
Истину?
Тогда почему 1234567890123 подходит?
Тогда почему 1234567890123 подходит?
m/^(?:(?:8|\+7)(?:[-() ]*\d){10}|(?:[-() ]*\d){5,10})$/
Пост-валидация междугородных телефонов Российской Федерации (после удаления добавочного номера а так же всех «левых» символов кроме цифр и плюса вначале) с учетом действующего Телефонного плана нумерации, (в том числе, кодов альтернативных операторов дальней связи):
"/^(?:8(?:(?:21|22|23|24|51|52|53|54|55)|(?:15\d\d))?|\+?7)?(?:(?:3[04589]|4[012789]|8[^89\D]|9\d)\d)?\d{7}$/"
Отбрасывает номера вида:
+70000000000
+77777777777
+78901234567
87654321098
88888888888
81234567890
которые для «непосвященных» выглядят как корректные.
"/^(?:8(?:(?:21|22|23|24|51|52|53|54|55)|(?:15\d\d))?|\+?7)?(?:(?:3[04589]|4[012789]|8[^89\D]|9\d)\d)?\d{7}$/"
Отбрасывает номера вида:
+70000000000
+77777777777
+78901234567
87654321098
88888888888
81234567890
которые для «непосвященных» выглядят как корректные.
Регулярка не рабочая.
не ловит:
+7(8181)123456
криво ловит
+7(8181)12-34-56
ловит кривое
8182 1234567801
вроде как и условия просты, всего 2:
1) начинается с +7 или 8
2) содержит не более 10 цифр (не считая +7 или 8) между которыми могут встречаться только пробел(не более 1 подряд), -, (, )
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Номер телефона