X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Регулярные выражения, в php-скрипте
Дилетант_mw
Дилетант_mw
Topic Starter сообщение 16.12.2011, 18:00; Ответить: Дилетант_mw
Сообщение #1


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

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

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

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

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

непонятно что за знаки ^ и +$ стоят в preg_match
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 16.12.2011, 19:24; Ответить: Banderas
Сообщение #2


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

буквы это
[php][A-zА-я][/php]
цифры
[php][0-9][/php]
точка, пробел, подчеркивание, минус
[php][\.\s_\-][/php]


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.12.2011, 19:27; Ответить: matroskin8
Сообщение #3


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


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Дилетант_mw
Дилетант_mw
Topic Starter сообщение 16.12.2011, 19:50; Ответить: Дилетант_mw
Сообщение #4


Благодарю, ребята за подробный ответ. Буду пробовать.
Хотя хотел уже готовую регулярку получить, а мне "удочку" дали. Всё правильно!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.12.2011, 19:56; Ответить: matroskin8
Сообщение #5


Так вот она - готовая... из предыдущего поста:
[php]$GLOBALS['opt_nameletters']='/^[\d\w\._-\s]+$/i';
if (!preg_match($GLOBALS['opt_nameletters'],$newname)) error(MSG_e_u_cyrforbidden);[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Дилетант_mw
Дилетант_mw
Topic Starter сообщение 16.12.2011, 23:31; Ответить: Дилетант_mw
Сообщение #6


(matroskin8 @ 16.12.2011, 19:56) *
Так вот она - готовая... из предыдущего поста:


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

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

Правильно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.12.2011, 9:56; Ответить: matroskin8
Сообщение #7


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


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Дилетант_mw
Дилетант_mw
Topic Starter сообщение 17.12.2011, 10:51; Ответить: Дилетант_mw
Сообщение #8


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
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.12.2011, 20:19; Ответить: matroskin8
Сообщение #9


(Дилетант @ 17.12.2011, 8:51) *
Тестирую $pattern = '/^[a-zа-я\d\._-\s]+$/ui';
$_POST['text'] = "Иванова Анна"

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

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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) База профилей+топики для Xrumer 12, регулярные обновления, скидки, бонусы.
98 xrumermaster 48716 15.9.2019, 0:47
автор: -xrumer-master-
Горячая тема (нет новых ответов) База профилей+топики+гостевые+рефспам для Xrumer 12.ххх, регулярные обновления
50 xrumer-master 12705 15.9.2019, 0:00
автор: xrumer-master
Открытая тема (нет новых ответов) Нужны рерайтеры. Простые и регулярные заказы.
Оплата 30-35 рублей / 1000 символов б.п.
3 13sanek 1911 9.5.2017, 12:26
автор: Gadraser


 



RSS Текстовая версия Сейчас: 28.3.2024, 19:11
Дизайн