Проверка формата строки с помощью регулярного выражения в PHP - PullRequest
1 голос
/ 23 августа 2010

Я пытался использовать preg_match с "/^[a-zA-Z0-9_-]+$/", пытаясь удостовериться, что указанная строка содержит только символы и ничего больше, но, похоже, что счетчик $ не рассчитывается должным образом, чтобы он полностью соответствовалконец строки, но это требует совпадения в начале строки, используя ^.

Если я использую {3,} вместо +: "/^[a-zA-Z0-9_-]{3,}$/", как было у меня вначале,Я мог бы написать 3 буквы / цифры, - или _, а затем любой символ, отличный от этих, и он считался бы совпадением.

код:

  if(preg_match("/^[a-zA-Z0-9_-]+$/", $value, $arr) && strlen($value) > 3)
  {
   echo $good .' Ok';
  }
  else
  {
   echo $bad .' Invalid username. (letters & numbers only)';
  }

, используя такие вещи, как$ value, он говорит мне, что все в порядке, когда он должен показываться как недопустимое имя пользователя из-за пробела или символов &.

слово слово

слово & слово

И оказалось, что это потому, что значения отправлялись на страницу через $ _GET, а $ value чего-то такого, как «слово и слово», вместо этого называлось «слово» ... есть ли способ это исправить?

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

И получается, что это потому, что значения отправлялись на страницу через $ _GET, а $ value чего-то, такого как «слово и слово», вместо этого называлось «слово» ... есть ли способ исправитьчто?

Здесь я даю дикое предположение, что ваша PHP-страница, которую вы вызываете из браузера как http://yoursite/page.php?something=word&word, читает $_GET['something'] как word вместо ожидаемого word&word.

Ну, это потому, что буквенный символ амперсанда обрабатывается как разделитель параметров $ _GET, а любой символ амперсанда, который вы хотите включить в значение параметра, должен быть закодирован как %26, как в http://yoursite/page.php?something=word%26word.В PHP вы можете использовать функцию urlencode() для кодирования ваших строковых значений:

$url = 'http://yoursite/page.php?something=' . urlencode('word&word');
0 голосов
/ 23 августа 2010

И оказывается, это было потому, что значения были отправлены на страницу через $ _GET и $ value чего-либо такие как «слово и слово» придумали как «слово» вместо этого ... есть ли способ это исправить?

Вам нужно закодировать амперсанд в URL:

[URL] /script.php?string=word&word

становится

[URL] /script.php?string=word&word

Попробуйте использовать urlencode , если ссылка генерируется PHP.

Редактировать Или попробуйте вместо этого использовать _POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...