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

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

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

 

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

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

тема: Только русские или только английские буквы
 
 автор: Freddie_X   (31.01.2008 в 21:26)   письмо автору
 
 

Первый раз сделал регулярное выражание и оно работает неправильно.
Вот оно:
<?php preg_match("/^(?:[a-zA-Z0-9_()\s]+)|(?:[а-яА-Я0-9_()\s]+)$/",$text); ?>

Оно проверяет, подходит ли $text по шаблону либо только латинские, либо только русские буквы. Ну и ещё цифры, скобки, подчёркивания и пробелы.
Если вводить только латинские буквы, все работает хорошо. Но если в переменной присутствует русский (не в начале строки), то регулярка его не видит и даёт TRUE, хотя должен наоборот, FALSE, так как присутствует и латинские, и русские буквы.
Если строка начинается с русской буквы, то независимо от остальных символов, возвращается FALSE.
Подскажите, как правильно написать такое регулярное выражение?

   
 
 автор: Faraon   (31.01.2008 в 22:16)   письмо автору
 
   для: Freddie_X   (31.01.2008 в 21:26)
 

Так, толком не понятно, что нужно в итоге?

   
 
 автор: Freddie_X   (31.01.2008 в 23:01)   письмо автору
 
   для: Faraon   (31.01.2008 в 22:16)
 

Ну вот например:
<?php if(preg_match("/^(?:[a-zA-Z0-9_()\s]+)|(?:[а-яА-Я0-9_()\s]+)$/",$text)) echo "Походит!";
else echo 
"Не подходит!"?>

Если $text = "abc" или "абв" и т.д., то выводить "Подходит!"
Если $text = "абвabc" или "abcабв" - выводить "Не подходит!"
Т.е. допускаются симолы пробела, скобок, подчёркивания, цифр и букв. Но есть условие, что буквы должны быть либо только русскими, либо только латинскими, а в перемешку нельзя.

   
 
 автор: Faraon   (31.01.2008 в 23:10)   письмо автору
 
   для: Freddie_X   (31.01.2008 в 23:01)
 

preg_match("/^(([a-z0-9_()]+)|([а-я0-9_()]+))$/is",$text)

   
 
 автор: Freddie_X   (01.02.2008 в 00:47)   письмо автору
 
   для: Faraon   (31.01.2008 в 23:10)
 

У меня вопрос, а почему вы убрали символы пробелов "\s" и "?:" в начале скобок? Ведь мне не надо их запоминать!

И почему не работает русский язык в регулярных выражениях?
Пишу такое перед скриптом - 0 эмоций...
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

   
 
 автор: Faraon   (01.02.2008 в 09:42)   письмо автору
 
   для: Freddie_X   (01.02.2008 в 00:47)
 

preg_match("/^(([a-z0-9_\(\)\s]+)|([а-яё0-9_\(\)\s]+))$/is",$text)

Насчет прбелов не заметил, что они вам нужны. Добавьте их
>?:
Зачем эта конструкция здесь нужна?

   
 
 автор: Freddie_X   (01.02.2008 в 11:30)   письмо автору
 
   для: Faraon   (01.02.2008 в 09:42)
 

Ну я вычитал, что если делать группирующие скобки, то если не хочу их запоминать (чтобы потом использовать через \1, \2, \3 и .т.д.), надо ставить эти 2 символа.
====
Проверил, что русский язык не работает, если переменную брать из GET, а если прописывать её прямо в коде, всё работает. Как можно исправить?

   
 
 автор: Faraon   (01.02.2008 в 21:25)   письмо автору
 
   для: Freddie_X   (01.02.2008 в 11:30)
 

По Вашему постановлению вопроса, Вам всего лишь надо проверить соответсвует ли строка(входящая переменная) условию либо только английские буковки, циферки и символы перечисленные Вами, либо то же самое только с русскими буковками.

>Проверил, что русский язык не работает, если переменную брать из GET
С передающего скрипта используйте функцию urlencode(),
с принимающего urldecode()

   
 
 автор: Freddie_X   (03.02.2008 в 17:21)   письмо автору
 
   для: Faraon   (01.02.2008 в 21:25)
 

Спасибо! Всё работает!

   
 
 автор: Freddie_X   (06.02.2008 в 18:15)   письмо автору
 
   для: Freddie_X   (03.02.2008 в 17:21)
 

Появился вопрос! А если я данные отправляю через форму? Как тогда записать urlencode в форме?

   
 
 автор: cheops   (07.02.2008 в 13:15)   письмо автору
 
   для: Freddie_X   (06.02.2008 в 18:15)
 

Под новые вопросы лучше заводить новые темы.

   
Rambler's Top100
вверх

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