Регулярное выражение и русские буквы в строке?

AlexX

Guest
Регулярное выражение и русские буквы в строке?

Не понимаю. Пишу
if (eregi("^[А-Яа-я]+$",$data))
а оно ноль эмоций на "asdfываFЯЧ".

И еще фигня:
Есть 2 функции - в одной я проверяю нет ли всяких там +, *, " и прочее, в другой проверяю на русские буквы
(не во всех строкахнужно избавлятся от русских букв).
Обе функии не работают -> стираю 2-ю -> первая работает как надо.

И как найти в eregi [, ], {, и }? Просто когда пишу \[\]\{\} выдает ошибку.

Спасибо.
 

specialist

Guest
Не понимаю. Пишу
if (eregi("^[А-Яа-я]+$",$data))
а оно ноль эмоций на "asdfываFЯЧ".
убери ^ и $ для совпадения либо добавь англ. буквы в класс, а так у тебя должна вся строка из русских букв состоять
 

AlexX

Guest
Точно! Спасибо! Я туг в рег. выражениях.
А с такой странностью не сталкивался (про функции)?
 

specialist

Guest

AlexX

Guest
function checksymbol($data){
//Проверка формы
$error=false;
if (ereg("[`!@#\$%^&*()\\;\",.'<>?/:;*+|=]",$data)){
$error=true;
}
return $error;
}
function checkrus($data){
$error=false;
if (eregi("[А-Яа-я]",$data)){
$error=true;
}
return $error;
}

Вторую стираю и все работает. Может глюки?
Как найти [, ], {, и }?
 

specialist

Guest
AlexX
в одной я проверяю нет ли всяких там +, *, "
а не лучше ли проверять есть ли "всё, кроме разрешённого"? ...поясняю....эта функция выдаст TRUE если есть неразрешённые явным образом символы
PHP:
function checksymbol($data) {
	if (preg_match('/[^a-zA-Z_0-9]+/i',$data)) return  TRUE;
	else return FALSE;	
}
echo checksymbol('abc_01');
Как найти [, ], {, и }?
так же как и остальное, только экранировать надо
 

korvin0

моська
specialist
Как найти [, ], {, и }? Просто когда пишу \[\]\{\} выдает ошибку.
он же писал, что не пашет экранирование. мой совет - юзать preg_*, избавишься от кучи проблем.
 

specialist

Guest
korvin0

PHP:
$str = '{}]';
if(eregi('\[|\]|\{|\}',$str))  echo 'FOUND';
else echo  'NOT FOUND';
 

korvin0

моська
но
PHP:
$str = '{}]'; 
if(eregi('[\[\]\{\}]',$str))  echo 'FOUND'; 
else echo  'NOT FOUND';
не пашет
 

korvin0

моська
specialist
ясно, спасибо за объяснение. но preg_* всё равно лучше :)
 
Сверху