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

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

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

 

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

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

тема: Проверка ввода логина
 
 автор: (sandr)   (13.03.2011 в 13:27)   письмо автору
 
 

Подскажите, что не так в этой регулярке?
if(!preg_match("~[a-zа-я0-9]{3,10}~i", $name))
{
echo "Имя введено верно!<br>";
exit;
}
else
{echo 'не Верно'; exit;}

  Ответить  
 
 автор: cheops   (13.03.2011 в 13:31)   письмо автору
 
   для: (sandr)   (13.03.2011 в 13:27)
 

Не указаны привязки к началу и концу строки
<?php
if(!preg_match("~^[a-zа-я0-9]{3,10}$~i"$name)) 
{
echo 
"Имя введено верно!<br>";
exit;
}
else
{echo 
'не Верно'; exit;}
?>

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 16:33)   письмо автору
 
   для: cheops   (13.03.2011 в 13:31)
 

Спасибо, всё работает. Но вот только почему-то с русскими буквами проблемы. Если ввожу их, то пишет ошибка(

  Ответить  
 
 автор: cheops   (13.03.2011 в 16:40)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 16:33)
 

А что за ошибка выводится (или имеется в виду, что логин не проходит проверки)?

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 16:47)   письмо автору
 
   для: cheops   (13.03.2011 в 16:40)
 

Да, логин не проходит проверку. Вот весь код

if(preg_match("~^[a-zа-я0-9]{3,10}$~i", $_POST['name']))
{
echo "Верно!<br>";
}
else
{
echo 'не верно';
}

echo '<form action="1.php" method="POST">
<input type="text" name="name">
<input type="submit" value="OK">
</form>';

  Ответить  
 
 автор: Deed   (13.03.2011 в 17:46)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 16:47)
 

~^[A-zА-я0-9]{3,10}$~i

i выполняет как бы "пост-проверку" введенных данных, разрешая "IgnoreCase". Сама же регулярка на машинном уровне выполняется в своем теле, ограниченном спецсимволами, в данном случае ~.
Это объяснение не совсем точно, но это - на грани шаманского бубна.

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 18:29)   письмо автору
964.1 Кб
 
   для: Deed   (13.03.2011 в 17:46)
 

Блин.. это тоже не подходит(( В прикреплённом файле видеоскрин.

  Ответить  
 
 автор: Deed   (13.03.2011 в 19:50)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 18:29)
 

Попробуй эту:
^[\w\dа-яА-Я-_]+\s?[a-zA-Zа-яА-Я0-9-_]+$
Она позволяет одно- и двухсловный логин вводить.
Если не работает, нужно показать info о сборке php cheops'y
Ну, аз здесь http://gskinner.com/RegExr/ - истина в последней инстанции.

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 20:03)   письмо автору
 
   для: Deed   (13.03.2011 в 19:50)
 

Пишу так
if(preg_match("/^[\w\dа-яА-Я-_]+\s?[a-zA-Zа-яА-Я0-9-_]+$/", $_POST['name'])) .....

Выкидывает ошибку
Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 17 in Z:\home\my-blog2.ru\www\1.php on line 6

Тесты провожу на денвере.

  Ответить  
 
 автор: cheops   (13.03.2011 в 20:08)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 20:03)
 

Тире после 9-ки и Я вынесете лучше вперед, или экранируйте их при помощи \.

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 20:21)   письмо автору
 
   для: cheops   (13.03.2011 в 20:08)
 

так?
/^[\w\dа-яА-\-Я_]+\s?[a-zA-Zа-яА-Я0-\-9_]+$/
(показывает туже ошибку)

  Ответить  
 
 автор: cheops   (13.03.2011 в 20:27)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 20:21)
 

Странно, у меня кстати, ни одно из ваших регулярных выражений ошибку не показывает. У вас какой версии PHP?

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 20:31)   письмо автору
 
   для: cheops   (13.03.2011 в 20:27)
 

PHP Version 5.2.12

На другом форуме подсказали поставить модификатор u и всё заработало. Т.е. выражение получается такое ~^[a-zа-я0-9]{3,10}$~iu

  Ответить  
 
 автор: (Sandr)   (13.03.2011 в 22:43)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 20:31)
 

Всем спасибо) Модеры, закройте темку пожалуйста)

  Ответить  
 
 автор: Deed   (14.03.2011 в 02:06)   письмо автору
 
   для: (Sandr)   (13.03.2011 в 20:31)
 

Оффтоп, но лучше использовать windows-1251. И страницы легче, и все мыслимые шрифты, включая узелковое письмо майя, поддерживаются.

  Ответить  
 
 автор: cheops   (14.03.2011 в 12:45)   письмо автору
 
   для: Deed   (14.03.2011 в 02:06)
 

Не всегда возможно, код здорово усложнится при вводе в систему нескольких языков.

  Ответить  
 
 автор: Deed   (14.03.2011 в 18:18)   письмо автору
 
   для: cheops   (14.03.2011 в 12:45)
 

Ни сколько!
Если страница на win-1251, то уже не важно, в какой кодировке MySQL - иврит, арабская вязь, чайна и джапан с кориа - все отображается корректно.
Я проверял это на всех сайтах, к которым имею доступ как дэвэлопер.
Хотя да, для гарантии нужно и базы делать в 1251.
С тем же пресловутым UTF-8 с его псевдоуниверсальностью связываться - вчерашний день.

  Ответить  
 
 автор: cheops   (14.03.2011 в 20:11)   письмо автору
 
   для: Deed   (14.03.2011 в 18:18)
 

Хм... любопытная точка зрения... А как строки на других языках в MySQL, если они будут в win-1251 таблицах?

  Ответить  
 
 автор: Deed   (15.03.2011 в 00:59)   письмо автору
 
   для: cheops   (14.03.2011 в 20:11)
 

А они не в win-1251, они в cp-1251 general_ci
Попробуйте даже на локал хосте.

  Ответить  
 
 автор: cheops   (15.03.2011 в 11:23)   письмо автору
 
   для: Deed   (15.03.2011 в 00:59)
 

Пропустил слово в предыдущем посте. А как строки на других языках будут сортироваться?

  Ответить  
 
 автор: Deed   (15.03.2011 в 11:29)   письмо автору
 
   для: cheops   (15.03.2011 в 11:23)
 

В смысле?

  Ответить  
 
 автор: cheops   (15.03.2011 в 11:40)   письмо автору
 
   для: Deed   (15.03.2011 в 11:29)
 

Лежит немецкий язык в таблице с кодировкой cp1251, как его отсортировать конструкцией ORDER BY, чтобы строки сортировались в соотвествии с порядком немецкого алфавита? utf-8 это сделает с легкостью.

  Ответить  
 
 автор: Deed   (15.03.2011 в 15:05)   письмо автору
 
   для: cheops   (15.03.2011 в 11:40)
 

М-да, интересно. Ни разу не сталкивался с подобной задачей.
Если не лень, приведите, пожалуйста, пример, где требуется такая сортировка. И еще, я понял, в таблице нет цифрового поля id?

  Ответить  
 
 автор: cheops   (15.03.2011 в 15:33)   письмо автору
 
   для: Deed   (15.03.2011 в 15:05)
 

Собственно задача одна - создание многоязыкового сайта. Есть два подхода - отдельные таблицы для разных языков или одна таблица для всех языков. Такая таблица обычно использует UTF-8, так как позволяет безболезенно сортировать данные на разных языках, причем все они сортируются корректно. Если мы будем использовать win-1251, у нас корректно будет сортироваться только русский текст, а все остальные будут выводиться в разнобой. Т.е. id может и быть, но весь текст на разных языках навален в одну таблицу, и иногда нужно выводить списки статей, то на одном, то на другом языках и они должны быть правильно отсортированы. Мне кажется без UTF-8 здесь будет сложно обойтись (если не рассматривать вариант с несколькими таблицами под разные языки).

  Ответить  
 
 автор: Deed   (15.03.2011 в 18:04)   письмо автору
 
   для: cheops   (15.03.2011 в 15:33)
 

Совершенно верно! Все сказанное совершенно верно. Просто передо мной никогда подобные задачи не стояли и, к тому же, редко кто "валит все в одну таблицу". Я тут провел эксперимент, и действительно, немецкий грешит в cp_1251.
Еще раз пардон за оффтоп.

[поправлено модератором: новая ветка выделена в новую тему Запрет символов < и >]

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

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