регулярные выражения

Yurets

Новичок
Помогите, пожалуйста, составить выражение, "пропускающее дальше" из формы отправки ТОЛЬКО латинские, русские символы, пробел и знаки / ( ) - . .

Поначитался всяких статей, голова кругом, совсем запутался: преги, ереги, тримы, реплэйсы... %(
 

Yurets

Новичок
Vallar_ultra, спасибо за оперативность!



Пока вот так реализовал, насколько это "симпатично"? (Просто я в этом деле почти полный новичок, Вы уж потерпите, пож-ста.)

preg_match("/[^(\w)|(\x7F-\xFF)|(\s)|(\/)|(\-)(\.)]/", $trimmed ))
 

Yurets

Новичок
PHP:
$var = @$_GET['q'] ;
$trimmed = trim($var); 
$trimmed = substr($var,0,20);
$trimmed_array = explode(" ",$trimmed);
$trimmed = preg_replace("/\*/", "x", $trimmed); // просто кое-где надо менять * на х

 if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)|(\/)|(\-)(\.)]/", $trimmed )) 
  {
   echo "Допустимы ТОЛЬКО буквы латинского и русского алфавита, а также знаки .-()/";
   exit();
  }
 else $good = $trimmed;
Как ни странно, но у меня работает. А почему не должно? :confused:
 

Vallar_ultra

Любитель выпить :)
Стоп!
У тебя определяется вхождение недопустимых символов - да, но прореплейсить ты их не сможешь по данному патерну. Если для проверки - то сойдёт, хотя использование оператора ИЛИ внутри символьного класса - это плохо. А если для замены ненужных символов - то не прокатит.
 

Yurets

Новичок
Vallar_ultra, я некорректно составил "ТЗ" и вот результат. Дело в том, что мне нужно разрешить выполнять скрипт ТОЛЬКО в том случае, если искомый код соответствуем налагаемым условиям, а в противном случае - нет. Поэтому я использовал preg_match. Осталось только разобраться почему плохо использовать "|" и как это исправить, чтобы было хорошо?
 

Vallar_ultra

Любитель выпить :)
Про символьные классы - читай внимательно ман.

а так:
PHP:
if(preg_match('/[^a-zа-яЁё \(\)\/\.\-]/i',$str)){
// ругаемся
}
else{
// что-то делаем
}
 

Yurets

Новичок
Vallar_ultra я ещё добавил 0-9, так как цифры тож мне нужны, а остальное оставил как Вы указали.
Ещё раз огромное спасибо, будете в Минске - с меня бокальчик светлого. :)
 
Сверху