Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Только русские буквы
Форумы портала PHP.SU » PHP » Регулярные выражения » Только русские буквы

Страниц (1): [1]
 

1. LORDIF - 27 Октября, 2010 - 18:34:53 - перейти к сообщению
Как сделать проверку, чтобы в строке не было ни одного знака или иностранной буквы, только русский алфавит?
2. Мелкий - 27 Октября, 2010 - 18:54:03 - перейти к сообщению
3. LORDIF - 27 Октября, 2010 - 19:05:25 - перейти к сообщению
Вот мой код:
PHP:
скопировать код в буфер обмена
  1. if(preg_match('/[а-я]+/msi',$_POST['userfname']))
  2.         {
  3.             $err[]='Ваше имя сожержит недопустимые символы!';
  4.         }

У меня не получается, выводит ошибку.
Может я что-то делаю неправильно?
4. Мелкий - 27 Октября, 2010 - 19:12:04 - перейти к сообщению
Да, неудачная регулярка, отрицание пропустил. Так ищет всё, кроме.
PHP:
скопировать код в буфер обмена
  1. preg_match('/[^а-я]+/msi',$ваша_строка);
5. OrmaJever - 27 Октября, 2010 - 19:40:24 - перейти к сообщению
LORDIF пишет:
У меня не получается, выводит ошибку.

А если бы мы видели текстэтой ошибки...
6. LORDIF - 27 Октября, 2010 - 20:20:01 - перейти к сообщению
Мелкий, все заработало, но мне нуно еще с заглавными буквами, помогите реализовать.
7. Мелкий - 27 Октября, 2010 - 20:29:47 - перейти к сообщению
А проверить сначала? они в комплекте, модификатор i, регистронезависимость.
8. LORDIF - 27 Октября, 2010 - 20:33:14 - перейти к сообщению
Я не разбираюсь в регулярках, сделайте с проверкой на оба регистра как считаете нужно пожалуста
9. Мелкий - 27 Октября, 2010 - 20:47:42 - перейти к сообщению
Повторю ещё раз: приведённая мной регулярка не зависит от регистра символов, т.к. указан модификатор i.
10. 28lion2008 - 01 Июля, 2016 - 10:50:32 - перейти к сообщению
К сожалению на php не получается сделать проверку русских символов. Проблема в том что он их как будто не видит. Тоесть в предложении "тут русские символы" он увидит два пробела, но если будет "русский" то он будет считать что строка не пустая, но символов для проверки нет.
Т.е. при фильтре '/[a-z]/i' условие выполнится где есть пробелы и не выполнится где их нет.
Единственный способ это пойти от обратного, если есть любые символы кроме русских то значит введено не правильно. Примерно так:
$filtr='/[a-z0-9\@\#\№\~\$\%\&\^\(\)\[\]\{\}\*\!\?\<\>\/\\\:\;\`\"\=\-\+\'\|]/i';
$str='Только русский текст';
if(preg_match($filtr,$str)){
echo 'Тут не только русские буквы';
};
11. Мелкий - 01 Июля, 2016 - 11:30:08 - перейти к сообщению
Нет, с чёрным списком там где нужен белый вы далеко не уйдёте.

Работа над ошибками 6-летней давности, утверждение, что строка состоит только из кириллицы:

Если нужны пробельные символы:
PHP:
скопировать код в буфер обмена
  1. preg_match('/^[а-яё\s]++$/ui',$str);

Только пробелы и кириллица:
PHP:
скопировать код в буфер обмена
  1. preg_match('/^[а-яё ]++$/ui',$str);
12. 28lion2008 - 01 Июля, 2016 - 12:00:22 - перейти к сообщению
Мой ответ для тех кто может столкнуться с этой проблемой (как я сам недавно). Нигде нет рабочего решения. Я забыл написать, что данное решение поможет для простой проверки правильности ввода, конечно не спасёт от вредных тестеров(для них можно устроить циклическую проверку каждого символа, входит ли он в массив разрешённых). К сожалению русские буквы в фильтре не воспринимаются, как в win-1251 так и в utf8, по крайней мере в моей версии php(5.3). Выкладывая эту информацию я неоднократно проверил кучу способов написания фильтра, потратил на это много времени и не желаю никому больше с этим мучаться. Пусть знают что можно либо использовать черный список либо проверять посимвольно "вручную".
13. IllusionMH - 01 Июля, 2016 - 12:27:59 - перейти к сообщению
28lion2008, в каком сочетании строки и регулярки пробел проходит если только [a-z] в списке? ограничения на начало и конец не забыли поставить как это Мелкий делал?

 

Powered by ExBB FM 1.0 RC1