Валидация текста

zag

Guest
Валидация текста

Привет.
Пытаюсь делать проверку на ввод левых символов, но чего то плохо получается, может кто подсказать, где я обложался ?

PHP:
if( ereg("[^-:A-Za-zА-Яа-я0-9_+!?%[]~`./\*# @]", $nick)):
		$errors.="error";
endif;
 

BigFoot03

Guest
А какие символы ты считаешь левыми, если не секрет?
 

BigFoot03

Guest
У тебя все символы разрешены, разве что " забыл :)
Зачем тогда проверять, если текст содержит практически все возможные символы.
Лучше хранить текст в оригинале, заботясь только о его сохранении и выводе.
Если в БД, то применяешь к нему addslashes при сохранении, при выводе stripslashes, далее
теги html обрабатываешь.
Если в файле, то только о тэгах заботишься.
 

qs

Guest
Я проверяю так, незнаю понравиться моя функция или нет, но работает

PHP:
function checksym($RR) {
 $TT = 1;
 $JJ = 0;
 $PP = explode("~", "*~$~(~)~+~-~0~1~2~3~4~5~6~7~8~9~@~_~A~B~C~D~E~F~G~H~I~J~K~L~M~N~O~P~Q~R~S~T~U~V~W~X~Y~Z~a~b~c~d~e~f~g~h~i~j~k~l~m~n~o~p~q~r~s~t~u~v~w~x~y~z~А~Б~В~Г~Д~Е~Ё~Ж~З~И~Й~К~Л~М~Н~О~П~Р~С~Т~У~Ф~Х~Ц~Ч~Ш~Щ~Ъ~Ы~Ь~Э~Ю~Я~а~б~в~г~д~е~ё~ж~з~и~й~к~л~м~н~о~п~р~с~т~у~ф~х~ц~ч~ш~щ~ъ~ы~ь~э~ю~я~");
 for ($i=0; $i < strlen($RR); $i++) {
  for ($j=0; $j < sizeof($PP) - 1; $j++) {
   if ($RR[$i] == $PP[$j]) {$JJ++;break;}
  }
 }
 if ($JJ == strlen($RR)) $TT = 0;
 return $TT;
}
Функция возвращает условие 0 если всё ок или 1 если всё плохо.

Символы разрешённые для ввода задаю в переменной $PP
Исключение нельзя использовать ~ ну там можно любой ненужный символ указать.

Это я сам придумал, с функцией ereg меня обламывает разбираться
 

zag

Guest
то : BigFoot03

У меня стоит конкретная задача - при регистрации нового пользователя проверять на наличие символов, которые не в списке.. Вот так вот.
 

qs

Guest
Я это и использую при регистрации пользователя, для того чтобы он левые символы ненавтыкал
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: qs
Это я сам придумал, с функцией ereg меня обламывает разбираться
Повод для гордости? :D

Автор оригинала: zag
Пытаюсь делать проверку на ввод левых символов, но чего то плохо получается, может кто подсказать, где я обложался ?
PHP:
if( ereg("[^-:A-Za-zА-Яа-я0-9_+!?%[]~`./\*# @]", $nick)): 
        $errors.="error"; 
endif;
вроде так на первый взгляд всё работает. В чём проблема-то?
 

Verk

Guest
Автор оригинала: BigFoot03
Если в БД, то применяешь к нему addslashes при сохранении, при выводе stripslashes, далее
теги html обрабатываешь.
При выводе из базы stripslashes не нужен.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Хм. проверил, на самом деле не работает. Проблема, похоже, из-за квадратных скобок внутри. Если их выкинуть --- всё замечательно. Бэкслеши почему-то не помогают.
 

zag

Guest
to qs: Помоему - это лишнее.


to Sad Spirit:
Вот такую ошибку получаю:

Warning: Invalid range end in /var/www/html/site/temp.php
 

zag

Guest
to Sad Spirit:
Самое удивительное, что это абсолютно нормально работало на виндах..
 

alpes

Весь мир на ладони
2zag
ereg использует не Perl-совместимый синтаксис! Здесь символ ^ говорит о начале строки а не все кроме ... ;)
 

zag

Guest
to alpes
Абсолютно верно это не Perl совместимый синтаксис, НО как раз таки ^ - символ всех кроме, а в Perl - начало строки.

Т.е. Здесь ^ - все кроме
 

alpes

Весь мир на ладони
Точна. Но все же конструкция [^x] - все кроме перечис ленного после ^ и до ] - действительна и для Perl-совместимых. Вне [] символ ^ используется для указания начала строки.
 

alpes

Весь мир на ладони
При использовании ereg на использование [ ] внутри квадратных скобок рег.выражения надо перед ними ставить обратный слэш: '[\[\]]' или "[\\[\\]]"
Но у меня ] никак не получилось заставить воспринимать не как спец.символ:
PHP:
if(ereg('[^\]]',']x')) echo "EREG OK!";
else echo "ereg не сработал...";
Респекты, разъясните в чем может быть лажа?!!
 
Сверху