[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярные выражения Только русские буквы
Ser18
Вот нашел на каком-то сайте регулярное выражение

if (preg_match('/[^а-я]+/msi', $wer)) {
echo '<div>'.$wer.' - НЕ Русские буквы</div>';
}else{
echo '<div>'.$wer.' - Русские буквы</div>';
}


Но оно как-то не правильно работает (то определяет русские буквы, то не определяет)

Еще такое пробовал
if (preg_match("/^[а-Я-]+$/ui", $wer)) {
echo "true";
}

Но оно совсем не работает (ошибку выдает)

Подскажите пожалуйста регулярное выражение, которое выдает true, если в строке только русские буквы, иначе false



Спустя 14 минут, 51 секунда (5.05.2011 - 14:25) inpost написал(а):
Тебе бы почитать про модификаторы.
Ты вставляешь большую букву Я с модификатором i , можешь объяснить почему?
В первом варианте ты не указываешь кодировку, в которой работаешь. Так же в первом варианте нет начала и конца строки, то есть поиск идёт символов не русских в целом, а не конкретное его наличие в данной переменной.

Второй вариант больше похож на правду, только так же там отсутствует ещё одна русская буква ё. Для второго варианта дефис рекомендуют ставить в самом начале, а не в конце ^[-а-я]+$, и модификаторы ui.

Спустя 2 минуты, 46 секунд (5.05.2011 - 14:28) DedMorozzz написал(а):
Цитата
Для второго варианта дефис рекомендуют ставить в самом начале, а не в конце
Совершенно не важно. Главное что бы не как интервал был. Я вставляю обычно, как раз - в конце. Ну иль в середине, проэкранировав оную

Спустя 4 минуты, 59 секунд (5.05.2011 - 14:33) inpost написал(а):
DedMorozzz
Я с тобой согласен и я не утверждал, что необходимо, а "рекомендуют" - намекал как раз на Котерова.

Спустя 2 минуты, 21 секунда (5.05.2011 - 14:35) Игорь_Vasinsky написал(а):
Цитата
дефис рекомендуют ставить в самом начале, а не в конце


а почему?

Спустя 4 минуты, 55 секунд (5.05.2011 - 14:40) Ser18 написал(а):
Цитата (inpost @ 5.05.2011 - 11:25)
Тебе бы почитать про модификаторы.

Почитать надо

Я просто думал найти готовое решение (казалось задача распространенная), но эти решения оказались не рабочие

Спустя 9 минут, 9 секунд (5.05.2011 - 14:49) inpost написал(а):
Ser18
Ты вечно будешь искать готовые решения, где за тебя всё пишут? Уже 8 месяцев, пора изучать, я как раз в такой период и взялся за изучение регулярок.

Спустя 15 минут, 30 секунд (5.05.2011 - 15:04) DedMorozzz написал(а):
Цитата (Игорь_Vasinsky @ 5.05.2011 - 14:35)
Цитата
дефис рекомендуют ставить в самом начале, а не в конце


а почему?

Не почему. Личные пристрастия.

Спустя 21 минута, 20 секунд (5.05.2011 - 15:26) inpost написал(а):
Игорь_Vasinsky
Котеров, 2-ое издание, раздел по регулярным выражениям.

Спустя 2 часа, 3 минуты, 9 секунд (5.05.2011 - 17:29) walerus написал(а):
ТС - а для чего их определять то?, цель задачи какая ? заменять, удалять, просто найти ? Что б к коду не возвращаться много раз )).


<html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<
title>Кодировка</title>
</
head>
<
body>

<?php

$array = array('Вася Пупкин', 'Doom Games', 'Пупкин Games');

foreach($array as $line)
if (preg_match('~[а-яА-Я]~', $line))
{
echo $line. ' - Русский язык'."\n<br>"; flush();
}
else
{
echo $line. ' - НЕ Русский язык'."\n<br>"; flush();
}
?>
</body>
</
html>


Это просто поиск есть ли хоть одна буква Русская в строке

Результат:

Вася Пупкин - Русский язык
Doom Games - НЕ Русский язык
Пупкин Games - Русский язык



Спустя 2 минуты, 55 секунд (5.05.2011 - 17:32) inpost написал(а):
walerus
Ты что-то немного не то написал smile.gif

Спустя 6 минут, 2 секунды (5.05.2011 - 17:38) walerus написал(а):
Цитата (inpost @ 5.05.2011 - 14:32)
walerus
Ты что-то немного не то написал smile.gif

Не тем цветом или .... ?, пояснил бы что не так то ))

Задание ТС - "Подскажите пожалуйста регулярное выражение, которое выдает true, если в строке только русские буквы, иначе false", я сделал не true - false, а вывод на экран.

Спустя 4 минуты, 33 секунды (5.05.2011 - 17:42) inpost написал(а):
walerus
Я ранее писал, модификаторы: iu , выделение начала и конца строки, отсутствие буквы ё - вот твои ошибки.

Спустя 8 минут, 30 секунд (5.05.2011 - 17:51) walerus написал(а):
Цитата (inpost @ 5.05.2011 - 14:42)
walerus
Я ранее писал, модификаторы: iu , выделение начала и конца строки, отсутствие буквы ё - вот твои ошибки.

Спешал фо ю ).

Модификатор "i" - Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра. У меня вроде как тоже учтены и маленькие и большие.

Модификатор "u" - шаблоны обрабатываются как UTF-8 строки. У меня как бы стоит кодировка UTF-8, особого смысла не заметил в нем.


Результат:

Вася Пупкин - Русский язык
Doom Games - НЕ Русский язык
Пупкин Games - Русский язык
Inpost Ё - Русский язык
Inpost ё - Русский язык


P.S. Если не так у меня, написал бы свой пример ;)

Спустя 2 минуты, 18 секунд (5.05.2011 - 17:53) Ser18 написал(а):
Цитата (walerus @ 5.05.2011 - 14:29)
ТС - а для чего их определять то?, цель задачи какая ? заменять, удалять, просто найти ?

Задача у меня такая

Есть таблица в ней два столбика В одном на русском написано в другом на латинском (словарь) Если латинскими буквами в поиск ввести слово, то ищем его в колонке с латинскими буквами и наоборот

Кроче буду изучать регулярные выражения

Спустя 4 минуты, 23 секунды (5.05.2011 - 17:58) walerus написал(а):
ну решение как бы дал, если совсем просто, то:

if (preg_match('~[а-яА-Я]~', $line))
$result = true;
else
$result = false;


У меня работает, у кого нет, приводим пример и результат :)

Спустя 4 минуты, 6 секунд (5.05.2011 - 18:02) Ser18 написал(а):
Цитата (walerus @ 5.05.2011 - 14:58)
ну решение как бы дал, если совсем просто, то:

if (preg_match('~[а-яА-Я]~', $line))
$result = true;
else
$result = false;


У меня работает, у кого нет, приводим пример и результат :)

Да работает Спаибо

Спустя 3 минуты, 11 секунд (5.05.2011 - 18:05) inpost написал(а):
Ser18
Ёлка не работает, Елkа не работает, ну а ты можешь брать, если лень изучить дня 3-4 на регулярки.

Спустя 16 секунд (5.05.2011 - 18:05) Ser18 написал(а):
Правда если написать такую букву é, то не работает

Пишет Русская

Спустя 1 минута, 43 секунды (5.05.2011 - 18:07) inpost написал(а):
walerus
Специально для тебя:
i - не надо дублировать большие и маленькие буквы
u - необходимо использовать всегда при работе с кодировкой UTF-8.
Начало и конец строки специально для того, чтобы в середине не встречались перемешки, чтобы работало нормально.

Спустя 1 минута, 31 секунда (5.05.2011 - 18:08) Ser18 написал(а):
inpost
Учить то я в любом случае буду (уже) Просто каждый раз спрашивать тоже не дело

Спустя 4 часа, 46 минут, 9 секунд (5.05.2011 - 22:55) walerus написал(а):
Цитата (Ser18 @ 5.05.2011 - 15:05)
Правда если написать такую букву é, то не работает

Пишет Русская

é - немного не латинская буква rolleyes.gif, еще можно со сравнением длинны слова поиграться, но это уже мб не совсем то

Спустя 11 минут, 19 секунд (5.05.2011 - 23:06) inpost написал(а):
walerus
И? Тут кто-то говорил про латинские буквы? Автор сказал, что ему нужны русские слова, такие слова как Ёлка, а ты даёшь неправильный код и не хочешь признать исправления.

Спустя 11 часов, 37 секунд (6.05.2011 - 10:06) DedMorozzz написал(а):
Буква ё не входит в интервал А-я. Так же, дабы не указывать а-яА-Я, можно просто написать А-я. По очереди большие буквы идут перед маленькими, а следом маленькие.
Итого А-я это эквивалент А-Яа-я
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.