Делаю на пхп форму регистрации. Так вот нужно сделать, чтобы можно было вводить только латиницу и цифры. если делать так if (preg_match("/[a-z0-9_]/i") {код} то он проверяет есть ли там латиница но при этом не запрещает кириллицу. А если так if (preg_match("/[а-яё]/i") {$error=1;} то не проверяются всякие другие символы, которых на клавиатуре тьма (!"№;%:?* и т.д.) и запариться можно перебирать их. посоветуйте как нормально это сделать, пожалуйста!
Код (Text): <?php $login= $_POST['login']; $id= $_GET['id']; echo "<form method=\"POST\" action=\"test.php?id=aa\"> Логин*:<br><input type=\"text\" maxlength=\"20\" name=\"login\" size=\"20\"><br> <input type=\"submit\" value=\"Отправить\"></form> "; if ($id=="aa") { if (preg_match("/[a-z0-9_]/i",$login)) { echo "все ок"; } else {echo "все плохо";} } ?> вводим asdasd - все ок вводим ыфвыфвфы - все плохо вводим asdasdвыфвыфв - все ок, а должно быть все плохо
не внимательно читали документаию http://php.ru/manual/reference.pcre.pattern.syntax.html ^ декларирует начало данных (или линии, в многострочном режиме) $ декларирует конец данных (или линии, в многострочном режиме) в данном случае она находит asdasd и говорит что все хорошо потому что НАШЛА. мысля понятна?
Ну так да, я в начале и написал, что данный способ ищет латиницу, но не запрещает при этом кириллицу, поэтому мне не подошел. А как сделать так чтобы нельзя было ввести ничего кроме a-z0-9_ А это как-то поможет в решении моего вопроса?
if (preg_match("/^[a-z0-9_]+$/i") {код} т.е. анализируется вся строка а не подстроки. понятно? и смени аватарку. разрешены только личные фото.
в этом случае ^ идет как отцинание подмножества. документацию читайте ВНИМАТЕЛЬНО прежде чем советовать.
440Hz, теперь он пишет, что всегда все плохо. может какие символы конца строки затесались? Sergey89, а вот это и вправда работает. Всем спасибо за помощь!
а что дает плюсик? можно эту строчку перевести на словесный язык? просто хотелось бы понимать что у меня в коде
блин... RTFM для начала... http://php.ru/manual/reference.pcre.pattern.syntax.html прочти один раз хотя бы до конца. ("/^[a-z0-9_]+$/i") проверить на целую строку содержащую символы a-z0-9_ в любом количестве больше 0 регистронезависимую p.s. + квантификатор, означающий одно или более вхождений
440Hz ну а я что написал? Если $login не цифры или буквы или _ то fail иначе ok. Если что-то не так поправьте....
Твоя регулярка означает: начало строки, потом a, потом -, потом z, потом 0, потом -, потом 9, потом _. =)