- Киев, Воронеж, Москва (одиночное название);
- Нижний Новгород, Нижний Тагил (составное с пробелом);
- Нью-Йорк, Санкт-Петербург, Тель-Авив, Сан-Хосе, Усть-Каменогорск (составное с дефисом);
- Рио-де-Житомир, Карл-Маркс-Штадт, Порт-о-Пренс (составное с двумя дефисами);
и занести его в public function rules() (в таком плане):
Код: Выделить всё
array('location','match','pattern'=>'/^[A-Za-z]+$/u','message'=>Yii::t("user","Incorrect symbol's. (A-z)")),
Код: Выделить всё
/^[А-Яа-я]+-?[А-Яа-я]+-?[А-Яа-я]+|[А-Яа-я]+s?[А-Яа-я]+|[А-Яа-я]+$/u
1. Нормально ли в таком виде? Потом уже средствами PHP перевести в нижний регистр (strtolower($st)) все название
(если вводят САНКТ_ПЕТЕРБУРГ, СаНкТ-ПеТерБург или поставить /ui) и установить большие буквы - первую, после пробела или дефиса
(думаю, что в Порт-о-Пренсе простят за заглавную "О").
2. В случае ввода пробельных симолов табуляции или перевода строки вместо " ", как бороться?
3. Конечно, победить ввод 'Санкт Петербург' скорее всего не получится... Не перебирать же все...
4. Не получится ввести название типа Лонг-О (потребует два символа после дефиса, тогда добавить еще вариант [А-Яа-я]+-?[А-Яа-я]+).
5. Справится Yii с таким набором (по идее должен, это же PHP)? Тем более, если нужно добавить отдельно конструкции [A-Za-z]+, чтобы
название вводили либо русскими, либо английскими, но не вперемешку...
Конечный вариант:
Код: Выделить всё
/^[А-Яа-я]+-?[А-Яа-я]+-?[А-Яа-я]+|[А-Яа-я]+-?[А-Яа-я]+|[А-Яа-я]+s?[А-Яа-я]+|[А-Яа-я]+$/ui