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

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

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

 

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

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

тема: Проверка фамилии и города
 
 автор: mikha   (21.02.2008 в 08:54)   письмо автору
 
 

<?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";
?>

Хотелось бы так, не соответствует маске, выдавало ошибку.

   
 
 автор: Петр   (21.02.2008 в 10:59)   письмо автору
 
   для: mikha   (21.02.2008 в 08:54)
 

Тут можно немного упростить задачу.. зачем вводить именно с больших букв, пусть введет нужные буквы, а при добавлении (при выводе) сделаешь ее заглавной

   
 
 автор: mikha   (21.02.2008 в 11:16)   письмо автору
 
   для: Петр   (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)); 

Разве не это делаю перед проверкой регулярным выражением.
Сначало перевожу в нижний регистр, потом делаю первую букву заглавной.
Не хочу так, хочу не соответствует маске, выдавало ошибку.

   
 
 автор: Faraon   (21.02.2008 в 11:31)   письмо автору
 
   для: mikha   (21.02.2008 в 11:16)
 

Для фамилии можно сделать так
<?php
$family
="Пупкин";
$pattern="#^[А-Я]{1}[а-яё]{1,19}$#";
preg_match($pattern,$family)? print "Правильно": print "Неправильно!";
?>


Только не пойму зачем ограничение фамилии 20 символов.
Если скажем у меня фамилия "Череззаборногузадерищенский"

   
 
 автор: mikha   (21.02.2008 в 12:00)   письмо автору
 
   для: Faraon   (21.02.2008 в 11:31)
 

Спасибо большое. Сижу, смотрю, не пойму, что не так до этого делал. Жаль потёр все варианты. Чуть позже попробую.
А по поводу 20, на самом деле из конфига берётся.
Прежде чем на форум закидывать лишнее убрал.

   
 
 автор: mikha   (21.02.2008 в 12:50)   письмо автору
 
   для: Faraon   (21.02.2008 в 11:31)
 

Вот я пропирушник..
так
$pattern = "#^[А-ЯЁ]{1}[а-яё]{1,20}$#";

работает
а так,
$pattern = "#^[А-ЯЁ]{1}[а-яё]{1, 20}$#";

не работает.
Буду дальше осваивать, никогда бы не подумал что из за этого.
Вроде просто колличество символов указывает..
Привычка блин, после запятой пробел делать.

   
Rambler's Top100
вверх

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