|
|
|
|
<?php
// Плиз, бьюсь уже третий день (и ночь), ну нифига не могу разобраться с регулярными вырежениями.
// Пока сделал так
// Т.е в фамилии только русский алфавит, первая буква большая.
// В названии города допустимы только русские буквы и один "-". При этом надо сделать что бы до и после "-" было не меньше двух символов. Ну и естетвенно с больших букв.
// Хотелось бы что бы всё было на регулярных выражениях и как можно короче.
// фамилия
if (isset($_REQUEST['e_family'])) $e_family = trim($_REQUEST['e_family']); else $e_family = '';
$e_family = ucfirst(strtolower($e_family));
if ($e_family and ereg("[^а-яА-ЯёЁ]", $e_family)) $stop .= '<li class="error">Вы используете запрещённые символы в фамилии.</li>'."\n";
if ($e_family and strlen($e_family) < 2) $stop .= '<li class="error">В фамилии меньше 2 символов.</li>'."\n";
if ($e_family and strlen($e_family) > 20) $stop .= '<li class="error">В фамилии больше 20 символов.</li>'."\n";
// город
if(isset($_REQUEST['e_land'])) $e_land = trim($_REQUEST['e_land']); else $e_land = '';
$e_e_land = explode("-", $e_land);
foreach($e_e_land as $index => $val) {
$e_e_land[$index] = ucfirst(strtolower($e_e_land[$index]));
if($e_land and strlen($e_e_land[$index]) < 2) $stop .= '<li class="error">Некорректное название города.</li>'."\n";
}
$e_land = implode("-", $e_e_land);
if ($e_land and strlen($e_land) < 2) $stop .= '<li class="error">В названии города меньше 2 символов.</li>'."\n";
if ($e_land and strlen($e_land) > 30) $stop .= '<li class="error">В названии города больше 30 символов.</li>'."\n";
if ($e_land and ereg("[^а-яА-ЯёЁ-]", $e_land)) $stop .= '<li class="error">Запрещённые символы в названии города.</li>'."\n";
if ($e_land and substr_count($e_land,"-") > 1) $stop .= '<li class="error">Только один символ "-" в названии города.</li>'."\n";
?>
|
Хотелось бы так, не соответствует маске, выдавало ошибку. | |
|
|
|
|
|
|
|
для: mikha
(21.02.2008 в 08:54)
| | Тут можно немного упростить задачу.. зачем вводить именно с больших букв, пусть введет нужные буквы, а при добавлении (при выводе) сделаешь ее заглавной | |
|
|
|
|
|
|
|
для: Петр
(21.02.2008 в 10:59)
| | >Тут можно немного упростить задачу.. зачем вводить именно с больших букв, пусть введет нужные буквы, а при добавлении (при выводе) сделаешь ее заглавной
Да что вы говорите, обратите внимание
// фамилия
if (isset($_REQUEST['e_family'])) $e_family = trim($_REQUEST['e_family']); else $e_family = '';
$e_family = ucfirst(strtolower($e_family));
|
Разве не это делаю перед проверкой регулярным выражением.
Сначало перевожу в нижний регистр, потом делаю первую букву заглавной.
Не хочу так, хочу не соответствует маске, выдавало ошибку. | |
|
|
|
|
|
|
|
для: mikha
(21.02.2008 в 11:16)
| | Для фамилии можно сделать так
<?php
$family="Пупкин";
$pattern="#^[А-Я]{1}[а-яё]{1,19}$#";
preg_match($pattern,$family)? print "Правильно": print "Неправильно!";
?>
|
Только не пойму зачем ограничение фамилии 20 символов.
Если скажем у меня фамилия "Череззаборногузадерищенский" | |
|
|
|
|
|
|
|
для: Faraon
(21.02.2008 в 11:31)
| | Спасибо большое. Сижу, смотрю, не пойму, что не так до этого делал. Жаль потёр все варианты. Чуть позже попробую.
А по поводу 20, на самом деле из конфига берётся.
Прежде чем на форум закидывать лишнее убрал. | |
|
|
|
|
|
|
|
для: Faraon
(21.02.2008 в 11:31)
| | Вот я пропирушник..
так
$pattern = "#^[А-ЯЁ]{1}[а-яё]{1,20}$#";
|
работает
а так,
$pattern = "#^[А-ЯЁ]{1}[а-яё]{1, 20}$#";
|
не работает.
Буду дальше осваивать, никогда бы не подумал что из за этого.
Вроде просто колличество символов указывает..
Привычка блин, после запятой пробел делать. | |
|
|
|