Перейти к содержимому



Регулярные выражения

#1 Дилетант

Дилетант
  • Пользователь
  • 53 сообщений
  • Репутация: 0
0

Отправлено 16 Декабрь 2011 - 17:00

Уважаемые специалисты.
Напишите для чайника код регулярки. У меня в скрипте идет проверка

$GLOBALS['opt_nameletters']='\w\d ;,+\\-*\/=А-Яа-я';
if (!preg_match('/^['.$GLOBALS['opt_nameletters'].']+$/',$newname)) error(MSG_e_u_cyrforbidden);

Какое значение для opt_nameletters записать, если:

Мне нужно в имени пользователя ТОЛЬКО:
- буквы латиница + русские
- цифры
- точка, пробел, подчеркивание, минус

ВСЁ. Остальные символы не должны проходить.

непонятно что за знаки ^ и +$ стоят в preg_match

 

 

  • 0

#2 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 16 Декабрь 2011 - 18:24

попробуй сам создать

буквы это
[A-zА-я]

цифры
[0-9]

точка, пробел, подчеркивание, минус
[\.\s_\-]

  • 0


#3 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 16 Декабрь 2011 - 18:27

"^" и "$" - это якоря, обозначающие начало и конец строки соответственно.
"+" - это квантор, который говорит, что должен быть как минимум 1 символ в проверяемой строке.
Сама регулярка может быть такой:
$pattern = '/^[\d\w\._-\s]+$/i';

Как пример работы - простой скрипт:
<?php

if($_POST['submit']){
$pattern = '/^[\d\w\._-\s]+$/i';
if(preg_match($pattern, $_POST['text'])) echo 'OK';
else echo 'Not OK';
}

?>

<form method="post">
<input type="text" name="text" />
<input type="submit" name="submit" />
</form>

  • 0


#4 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 16 Декабрь 2011 - 18:50

Благодарю, ребята за подробный ответ. Буду пробовать.
Хотя хотел уже готовую регулярку получить, а мне "удочку" дали. Всё правильно!
  • 0

#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 16 Декабрь 2011 - 18:56

Так вот она - готовая... из предыдущего поста:
$GLOBALS['opt_nameletters']='/^[\d\w\._-\s]+$/i';
if (!preg_match($GLOBALS['opt_nameletters'],$newname)) error(MSG_e_u_cyrforbidden);

  • 0


#6 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 16 Декабрь 2011 - 22:31

Так вот она - готовая... из предыдущего поста:


А твоя регулярочка русские буквы не пропускает.

Так вот $pattern = '/^[А-я\d\w\._-\s]+$/i';
вроде работает.

Правильно?
  • 0

#7 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 17 Декабрь 2011 - 08:56

А, не увидел, что надо еще и кириллица ;)
Нет, так не совсем точно... правильнее так (добавить еще модификатор u, если работаешь с юникодом, если кодировка кириллическая, то этот модификатор не нужен):
$pattern = '/^[a-zа-я\d\._-\s]+$/ui';

  • 0


#8 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 17 Декабрь 2011 - 09:51

matroskin8, благодарю, уважаемый, за подробное разъяснение. Для младенца всё разжевал, как добрый родитель.
Ну, а я, как послушный дитя, посмотрел-таки теорию регулярных выражений. И сейчас это уже не темный лес и два китайца.

matroskin8, вижу убрал \w и заменил на a-z.
\w - спецсимвол, который призван заменить целый символьный класс, в него входят все символы, которые могут входить в слово, обычно это [a-zA-Z_], хотя много может зависеть от установленной локали, поддержки юникода и т.д.


Тестирую $pattern = '/^[a-zа-я\d\._-\s]+$/ui';
$_POST['text'] = "Иванова Анна"

Не проходит. Not Ok Даже модификатор u убирал. Потому что кириллица у меня.

$pattern = '/^[А-я\d\w\._-\s]+$/i';
$_POST['text'] = "Иванова Анна"
Проходит - Ok
  • 0

#9 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 17 Декабрь 2011 - 19:19

Тестирую $pattern = '/^[a-zа-я\d\._-\s]+$/ui';
$_POST['text'] = "Иванова Анна"

Не проходит. Not Ok Даже модификатор u убирал. Потому что кириллица у меня.

Странно... У меня работает, как и положено. Ну, используй тогда указанный ниже вариант, раз он работает.
Кстати, может будет интересен урок (есть и в формате видео) по составлению регулярки для e-mail - Валидация e-mail на лету с использованием jQuery
  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru