[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать проверку на наличие русских букв?
zvezda_t
Всем привет!

Не работает функция, подскажите пожалуйста, где ошибка:

//Проверка присутствия в тексте только русских букв
function check_rus($str)
{
setlocale(LC_CTYPE, "ru_RU.CP1251");
if (preg_match("/^([а-яА-Я]+)$/", $str))
{
return true;
}
return false;
}




Спустя 4 минуты, 32 секунды (14.09.2011 - 13:05) alex12060 написал(а):
* не заметил винду :О


#([а-я]+)#i

Спустя 1 минута, 42 секунды (14.09.2011 - 13:06) Winston написал(а):
Файл у тебя тоже в windows-1251 ?
Эта проверка вернет true если ты только передашь только одно слово на проверку
$str = 'Привед';

Покажи пример, что ты передаешь на проверку ?



Спустя 17 секунд Winston написал(а):
alex12060
Цитата (zvezda_t @ 14.09.2011 - 13:00)
setlocale(LC_CTYPE, "ru_RU.CP1251");

smile.gif

Спустя 13 минут, 28 секунд (14.09.2011 - 13:20) Игорь_Vasinsky написал(а):
Для анси
#[а-яё]#i

Для юникод
#[а-яё]#iu

Спустя 3 минуты, 24 секунды (14.09.2011 - 13:23) Winston написал(а):
Еще все зависит от того в каком виде передаются данные на проверку ?

Спустя 2 минуты, 26 секунд (14.09.2011 - 13:26) zvezda_t написал(а):
Winston
я и передавала на проверку слово.
Теперь мне нужно проверить чтоб были только русские буквы, пробел и "-".

так не правильно?
if (preg_match("#[а-яё]#i\s\-", $str))



Цитата
Еще все зависит от того в каком виде передаются данные на проверку ?


//проверка данных
$lastname=iconv('UTF-8', 'cp1251', $res->{'family-name'});
$lastname=ucfirst(strtolower(trim($lastname)));
if(check_rus($lastname))
{...}

Спустя 1 минута, 6 секунд (14.09.2011 - 13:27) Игорь_Vasinsky написал(а):
if (preg_match("#[а-яё\-\s]#i", $str))


\s - это пробел, если он те нужен



Спустя 2 минуты, 25 секунд (14.09.2011 - 13:29) Winston написал(а):
Вот так пробуй
if (preg_match("#^[а-яё\-\s]+$#i", $str))

Спустя 2 минуты, 40 секунд (14.09.2011 - 13:32) Winston написал(а):
Цитата (zvezda_t @ 14.09.2011 - 13:26)
$lastname=iconv('UTF-8', 'cp1251', $res->{'family-name'});

Нужно вот так писать
$lastname=iconv('UTF-8', 'windows-1251', $res->{'family-name'});

Спустя 31 секунда (14.09.2011 - 13:32) zvezda_t написал(а):
Winston почему?

Спустя 3 минуты, 58 секунд (14.09.2011 - 13:36) Winston написал(а):
Цитата (zvezda_t @ 14.09.2011 - 13:32)
Winston почему?

Хм.. Мне всегда казалось, что CP1251 используется только в запросах sql, а в остальных случаях windows-1251. Я оказался не прав, CP1251 тоже нормально работает smile.gif

Спустя 4 минуты, 51 секунда (14.09.2011 - 13:41) zvezda_t написал(а):
Winston, спасибо smile.gif

Спустя 7 минут, 8 секунд (14.09.2011 - 13:48) Winston написал(а):
Цитата (zvezda_t @ 14.09.2011 - 13:41)
Winston, спасибо

Получилось ?

Спустя 10 минут, 8 секунд (14.09.2011 - 13:59) zvezda_t написал(а):
Да, но почему то только для utf-8.

Если делаю свою проверку с приобразованием типов и сменой регистров, то ерунду выдаёт.

Спустя 2 минуты, 26 секунд (14.09.2011 - 14:01) Игорь_Vasinsky написал(а):
какую ерунду, например?

Спустя 2 минуты, 16 секунд (14.09.2011 - 14:03) Winston написал(а):
У тебя файл, тоже в windows-1251 ?

Спустя 7 минут, 27 секунд (14.09.2011 - 14:11) zvezda_t написал(а):
Цитата
какую ерунду, например?


через слово, через два слова - срабатывает, то не срабатывает, хотя все слова на русском.

Спустя 2 минуты, 17 секунд (14.09.2011 - 14:13) zvezda_t написал(а):
Цитата
У тебя файл, тоже в windows-1251 ?

файл в ANSI as UTF-8

Спустя 7 минут, 6 секунд (14.09.2011 - 14:20) Winston написал(а):
Цитата (zvezda_t @ 14.09.2011 - 14:13)
файл в ANSI as UTF-8

Тогда другое дело. Попробуй так написать
setlocale(LC_CTYPE, "ru_RU.CP1251");

function check_rus($str)
{
if (preg_match("/^([а-яё\s-]+)$/iu", $str))
{
return true;
}
return false;
}
$lastname = $res->{'family-name'};
$lastname = ucfirst(strtolower(trim($lastname)));
var_dump(check_rus($lastname));

Должно true выдать

Спустя 28 минут, 36 секунд (14.09.2011 - 14:49) zvezda_t написал(а):
if (preg_match("/^([а-яё\s-]+)$/iu", $str))
"u"=оставить?

вроде работает smile.gif

Спустя 19 минут, 59 секунд (14.09.2011 - 15:09) Winston написал(а):
Цитата (zvezda_t @ 14.09.2011 - 14:49)
"u"=оставить?

Да, оставить, его используют при работе с символами юникода.

Спустя 3 часа, 24 минуты, 37 секунд (14.09.2011 - 18:33) neadekvat написал(а):
Интересные вы личности. ё отдельно ставите, но почему-то думаете, что при этом с Ё движок регулярок прекрасно знаком.

Цитата (Winston @ 14.09.2011 - 15:20)
$lastname = $res->{'family-name'};

А при создании объекта ты еще & небось ставишь.
Хватит использовать устаревшие конструкции.

Спустя 5 минут, 59 секунд (14.09.2011 - 18:39) ZSH написал(а):
Цитата

$lastname = $res->{'family-name'};

Кажется мне что тут собака зарыта в дефисе в имени свойства.

Спустя 3 минуты, 49 секунд (14.09.2011 - 18:43) Winston написал(а):
Цитата (ZSH @ 14.09.2011 - 18:39)
в имени свойства

Не свойства, а элемента smile.gif

Спустя 11 минут, 5 секунд (14.09.2011 - 18:54) ZSH написал(а):
Цитата
Не свойства, а элемента

именно свойства объекта $res.
Если в названиях полей в таблице БД есть дефис, то после mysql_fetch_object приходится так-же извращатся

Спустя 2 минуты, 25 секунд (14.09.2011 - 18:57) Winston написал(а):
Цитата (ZSH @ 14.09.2011 - 18:54)
именно свойства объекта $res.

А ну да...

Спустя 17 часов, 19 минут, 38 секунд (15.09.2011 - 12:16) czech написал(а):
что то у меня не получается
<?php
$lastname=$_POST["data"];
function check_rus($lastname)
{
setlocale(LC_CTYPE, "ru_RU.UTF-8");
if (preg_match("#^[а-яё\-\s]+$#i", $lastname))
{
return true;
}
return false;
}


$lastname=ucfirst(strtolower(trim($lastname)));
if(check_rus($lastname))
{
echo "рус";
}
else
{
echo "eng";
}
?>

Спустя 7 минут, 36 секунд (15.09.2011 - 12:24) Winston написал(а):
czech
Попробуй так
setlocale(LC_CTYPE, "ru_RU.CP1251");

function check_rus($str)
{
if (preg_match("/^([а-яёЁ\s-]+)$/iu", $str))
{
return true;
}
return false;
}
$lastname = $_POST['data'];
$lastname = ucfirst(strtolower(trim($lastname)));
var_dump(check_rus($lastname));

Спустя 11 минут, 55 секунд (15.09.2011 - 12:36) twin написал(а):
зачем там условие... Даже если хочется четких типов, есть приведение. А вообще вот это должно работать без всяких изысков.
function check_rus($str) 
{
return (boolean)preg_match("/^([а-яёЁ\s-]+)$/iu", $str);
}
$lastname = 'русский букв Ё';

var_dump(check_rus($lastname));

Спустя 42 секунды (15.09.2011 - 12:36) czech написал(а):
Цитата (Winston @ 15.09.2011 - 13:24)

setlocale(LC_CTYPE, "ru_RU.CP1251");

function check_rus($str)
{
if (preg_match("/^([а-яёЁ\s-]+)$/iu", $str))
{
return true;
}
return false;
}
$lastname = $_POST['data'];
$lastname = ucfirst(strtolower(trim($lastname)));
var_dump(check_rus($lastname));

чтоб в форме не ввел
выдает
bool(false)

Спустя 2 минуты, 56 секунд (15.09.2011 - 12:39) Winston написал(а):
У тебя какая кодировка, utf8 или СР1251 ?

Спустя 2 минуты, 23 секунды (15.09.2011 - 12:42) czech написал(а):
я может не правильно понял
но мне надо определить на каком языке пост получен

Спустя 42 секунды (15.09.2011 - 12:42) czech написал(а):
Цитата (Winston @ 15.09.2011 - 13:39)
У тебя какая кодировка, utf8 или СР1251 ?

utf-8

Спустя 6 минут, 53 секунды (15.09.2011 - 12:49) Winston написал(а):
Цитата
setlocale(LC_CTYPE, "ru_RU.CP1251");

Цитата
$lastname = ucfirst(strtolower(trim($lastname)));

Попробуй из кода убрать эти две строки...

Спустя 21 минута, 5 секунд (15.09.2011 - 13:10) czech написал(а):
Цитата (Winston @ 15.09.2011 - 13:49)

Попробуй из кода убрать эти две строки...

убрал , ввожу по русски и на латинице
bool(false)

Спустя 3 минуты, 38 секунд (15.09.2011 - 13:14) Winston написал(а):
Цитата (czech @ 15.09.2011 - 13:10)
убрал , ввожу по русски и на латинице
bool(false)

Не знаю, у меня все работает, прикрепи сюда свой php файл.

Спустя 5 минут, 37 секунд (15.09.2011 - 13:20) czech написал(а):
вот

Спустя 10 минут, 12 секунд (15.09.2011 - 13:30) Winston написал(а):
<form action="rus_eng.php" method=POST>
<
input type=data name=searchword size=30></input>
<
input type=submit value="Искать"></input><br><br>
</
form>

Во первых у вас форма не правильная, вот правильно
<form action="rus_eng.php" method=POST>
<
input type="text" name="searchword" size=30></input>
<
input type="submit" value="Искать"></input><br><br>
</
form>

А во вторых перепишите файл rus_eng.php вот так:
Свернутый текст

<?php
function
check_rus($str)
{
$str = iconv('CP1251', 'UTF-8', $str);
if (preg_match("/^([а-яёЁ\s-]+)$/iu", $str))
return true;

return false;
}

$lastname = $_POST['searchword'];
var_dump(check_rus($lastname));
?>

Спустя 16 минут, 26 секунд (15.09.2011 - 13:46) czech написал(а):
Цитата (Winston @ 15.09.2011 - 14:30)
<form action="rus_eng.php" method=POST>
<
input type=data name=searchword size=30></input>
<
input type=submit value="Искать"></input><br><br>
</
form>

Во первых у вас форма не правильная, вот правильно
<form action="rus_eng.php" method=POST>
<
input type="text" name="searchword" size=30></input>
<
input type="submit" value="Искать"></input><br><br>
</
form>

А во вторых перепишите файл rus_eng.php вот так:
Свернутый текст

<?php
function
check_rus($str)
{
$str = iconv('CP1251', 'UTF-8', $str);
if (preg_match("/^([а-яёЁ\s-]+)$/iu", $str))
return true;

return false;
}

$lastname = $_POST['searchword'];
var_dump(check_rus($lastname));
?>

может у меня что нибудь с apache?
не работает

Спустя 3 минуты, 39 секунд (15.09.2011 - 13:50) killer8080 написал(а):
Winston
а с каких пор инпут стал парным тэгом? И в кавычках должны быть значения всех атрибутов.
html синтаксис
<input type="text" name="searchword" size="30">

xhtml синтаксис
<input type="text" name="searchword" size="30" />

Спустя 1 минута, 42 секунды (15.09.2011 - 13:52) Winston написал(а):
Цитата (killer8080 @ 15.09.2011 - 13:50)
Winston
а с каких пор инпут стал парным тэгом?

Втык huh.gif

Спустя 18 минут, 36 секунд (15.09.2011 - 14:10) killer8080 написал(а):
Winston
не обижайся, я ж не со зла user posted image

Спустя 3 минуты, 2 секунды (15.09.2011 - 14:13) Winston написал(а):
laugh.gif Интересно за что обижаться ?



Спустя 1 минута, 33 секунды Winston написал(а):
На смайлику sorrie? Я такого слова не знаю

Спустя 18 часов, 12 минут, 53 секунды (16.09.2011 - 08:26) czech написал(а):
проверил на другом сервере
и менял кодировку на windows-1251
не работает!!!

Спустя 1 час, 40 минут, 30 секунд (16.09.2011 - 10:07) Winston написал(а):
Попробуй мои файлы у себя запусти, если не сработает, то у меня уже нет слов...


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

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