Странная проблема с preg_match

proWoke

Новичок
Вот сейчас хочу составить проверку на входных данные для имени.
И такая штука странная вылазит.
В общем вот код
PHP:
<?
$str = "Маким";
if (preg_match("/.*[^a-zA-Zа-яА-Я0-9_]/", $str) == "1") { echo "lol"; }
?>
Вот так он не выводит "lol" и вроде как логично. Если писать "Маким_09", то тоже ничего не выведет, что я и хочу. А вот если написать "Максим_09" т.е. добавляется ещё "с", то он выводит "lol". Также он срабатывает на русские "р" "щ", больше пока не нашёл. Почему так?
 

Gas

может по одной?
PHP:
if (preg_match("/[^a-zA-Zа-яА-Я0-9_]/u", $str)) { echo "lol"; }
 

proWoke

Новичок
убивает жадность да, но почему только определённые символы я не могу допереть.
 

Gas

может по одной?
не жадность, U - жадность, u - Pattern strings are treated as UTF-8
http://php.net/manual/en/reference.pcre.pattern.modifiers.php

я конечно всего-лишь предположил что у тебя кодировка utf, а не win-1251, но по симптомам похоже было.

ещё в диапазон а-я, не попадает ё, дополнительно укажи
 

proWoke

Новичок
не жадность, U - жадность, u - Pattern strings are treated as UTF-8
http://php.net/manual/en/reference.pcre.pattern.modifiers.php

я конечно всего-лишь предположил что у тебя кодировка utf, а не win-1251, но по симптомам похоже было.

ещё в диапазон а-я, не попадает ё, дополнительно укажи
Спасибо.
 
Сверху