Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > пропускать только буквы Aa-Zz и Аа-Яя и цифры 0-9


Автор: artlayers 19.6.2010, 07:48
Как сделать средствами php так чтобы текстовая переменная, содержащая в себе некоторую строку, ну например "asdfaklwjnwkwqJGBSASA121SA GCFSA - dsfdsdd" проверялась на наличие в ней только символов Aa-Zz и Аа-Яя и цифры 0-9 и знаков _ - — и пробела. Если присутвует хотя бы один смвол не из этой последовательности, то нужно об этом просто сказать. Реализацию через strpos знаю, но она слишком глупа smile нужно поумнее. Подскажите пожалуйста.

Автор: patap 19.6.2010, 09:32
Код

if (preg_match('#^[—\w- ]+$#', $str)) {
  echo 'yep!';
}


Автор: artlayers 19.6.2010, 12:44
Попробовал вот так, не работает, ничего не выводит

Код

<?php
$str="hjfgj%^<>fgjfgFSFSFSFSFWQRF-ОППОФМоолыавфыаышаыныртчлслвыдар—$098!@!!!!!!!!!!!!!!";
if (preg_match('#^[—\w- ]+$#', $str)) {
  echo 'yep!';
}
?>

Автор: ksnk 19.6.2010, 13:08
Цитата(artlayers @  19.6.2010,  12:44 Найти цитируемый пост)
... не работает, ничего не выводит

Ух ты! А про оператор else что-нибудь удалось узнать на уроках программирования?

Автор: artlayers 19.6.2010, 13:25
Цитата(ksnk @ 19.6.2010,  13:08)
Цитата(artlayers @  19.6.2010,  12:44 Найти цитируемый пост)
... не работает, ничего не выводит

Ух ты! А про оператор else что-нибудь удалось узнать на уроках программирования?

да мне ничего не надо выводить если там все так, дело в том, что даже на строку 
$str='фбвгджзsfsdfsdfsdhjutgjfg';
и на строку 
$str='фбвгджзsfsdfsdf;%:?*)()*"№sdhjutgjfg';
никак не реагирует, всегда 0 возвращает

Автор: patap 19.6.2010, 15:42
так попробуй
Код

preg_match('#^[—а-яa-z0-9_\- ]+$#i', $str)

Автор: artlayers 19.6.2010, 15:47
Большое спасибо! Работает. Немножко подправил
Код

preg_match('#^[—\А-Яа-яa-zA-Z0-9_\- ]+$#i', $str)

Автор: patap 19.6.2010, 16:05
artlayers, тогда убери флаг i, он указывает на регистронезависимость


да, и если тема решена - отмечай как "Решенная"  smile

Автор: artlayers 19.6.2010, 18:59
не работает регистронезависимость через i почему-то
понял в чем проблема.
для латиницы все хорошо, а для кириллицы вот такое, например слово "кириллица" выглядит как "%EA%E8%F0%E8%EB%EB%E8%F6%E0" что можно тут придумать, чтобы такую строку проверить?

Автор: bars80080 19.6.2010, 19:34
Цитата(artlayers @  19.6.2010,  18:59 Найти цитируемый пост)
что можно тут придумать, чтобы такую строку проверить?

преобразовать вначале через rawurldecode($str)

Автор: artlayers 19.6.2010, 20:53
помогло, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)