Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка на выражение с лишними пробелами между словами
 
 автор: Shaspetr   (19.05.2015 в 16:31)   письмо автору
 
 

Здраствуйте, помогите пожайлуста составить регулярное выражение, которое проверяет выражение на лишние пробелы между словами. Слов может быть любое количество.

  Ответить  
 
 автор: Shaspetr   (19.05.2015 в 17:30)   письмо автору
 
   для: Shaspetr   (19.05.2015 в 16:31)
 

^([a-zA-Zа-яА-Я]+\s?[a-zA-Zа-яА-Я]+){2,20}$

Вот составил примерно, но мне нужно еще что-бы было всего не более 20 символов, но почему-то на превышение символов не срабатывает. Возращает true, хотя должно false.

  Ответить  
 
 автор: Мимовася   (20.05.2015 в 14:28)
 
   для: Shaspetr   (19.05.2015 в 17:30)
 

Так и не вник до конца, какие варианты нужно пропускать, какие отсекать.
Ваш вариант требует наличия от 2 до 20 пар слов, причём между эти парами пробел не ставится, да и между словами у вас пробел необязателен (из-за квантификатора "?").


Мой вариант (класс символов упростил для читаемости):
^(?:[a-z]{1,20}\s(?!\s))*[a-z]{1,20}$

  Ответить  
 
 автор: Shaspetr   (20.05.2015 в 17:31)   письмо автору
 
   для: Мимовася   (20.05.2015 в 14:28)
 

Спасибо :)
Мне необходимо чтобы у пользователей была возможность вводить инициалы имя и фамилия как вместе так и по отдельности, при том что-бы длина инициалов не превышало 20 символов.
То есть
правильные варианты: Иван, Иванов Иван, Иванов Иван Иванович(между словами один пробел).
неправильные: Иванов Иван(лишний пробел), Иванов Иван Ивановиччччччччч(длина инициалов превышает 20 символов).
Ваше выражение работает для пробелов(не пропускает лишние), но если попробовать ввести более 20 символов, то тоже пропускает, а должно не пропускать.
Тестирую через онлайн калькулятор регулярных выражений http://planetcalc.ru/708/

  Ответить  
 
 автор: Shaspetr   (20.05.2015 в 18:33)   письмо автору
 
   для: Shaspetr   (20.05.2015 в 17:31)
 

Пришел к выводу, что нужно делать два регулярных выражений, первое проверяет на количество символов:
/^[a-zA-Zа-яА-Я\s]{2,20}$/;
второе ищет лишние пробелы, хочу сделать компактное выражение, чтобы просто проверяло на лишний пробел:
на этом моменте опять встрял:
пробую [^\s]{2,}, срабатывает некорректно, сломал мозг на этих регулярках, не идут вообще(

  Ответить  
 
 автор: Мимовася   (21.05.2015 в 10:59)
 
   для: Shaspetr   (20.05.2015 в 18:33)
 

Так нужно, чтобы каждое слово было не более 20 символов или вся строка целиком?
Моё выражение ограничивает длину каждого слова (Ивановиччччччччч - 16 символов - совпадает, Ивановиччччччччччччччч - 22 символа - не совпадает).
Длину всей строки можно ограничить поставив рядом с "^" шаблон
(?=.{1,20}$)
. Но такие вещи проще сделать отдельной проверкой длины строки без всяких регулярок.

  Ответить  
 
 автор: Мимовася   (21.05.2015 в 11:11)
 
   для: Shaspetr   (20.05.2015 в 18:33)
 

Убраны ограничения на каждое слово, добавлено ограничение на всю строку - от 1 до 20 символов (вообще странное ограничение, у меня не самые длинные ФИО, но уже 27 символов).
(?=.{1,20}$)^(?:[a-z]+\s(?!\s))*[a-z]+$

  Ответить  
 
 автор: Shaspetr   (25.05.2015 в 13:55)   письмо автору
 
   для: Мимовася   (21.05.2015 в 11:11)
 

Благодарю:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования