Intereting Posts
Как я могу использовать библиотеки Perl из PHP? Рекомендации по обработке ошибок в базе данных в CodeIgniter Использовать Laravel для загрузки таблицы в формате CSV Обнаруживать, когда скрипт задерживается и позволяет ему пропустить или продолжить в PHP Проверка ключей массива php-массива Получение данных из URL-адреса в PHP? PHP-элемент вставки XML после (или до) другого элемента Почему cookie не работает в CodeIgniter? Как я могу отслеживать почту, отправленную с помощью PHP Swift Mailer? PHP in_array () / array_search () нечетное поведение Могу ли я использовать подготовленный документ PDO для привязки идентификатора (имя таблицы или поля) или ключевое слово синтаксиса? Предупреждение: mysql_fetch_object (): предоставленный аргумент не является допустимым ресурсом результата MySQL PHP удаляет повторяющиеся значения из многомерного массива Как подключить контроллер для просмотра в PHP OOP? Разрешенный размер памяти 262144 байт исчерпан (пытался выделить 24576 байт)

Проверка правильности выражения php

просто быстрый вопрос am abit rubish с регулярным выражением, поэтому я думал бы разместить здесь. Ниже приведено регулярное выражение для подтверждения имени пользователя.

У меня это до сих пор, но не работает

<?php $username=$_POST['username']; if (!eregi("^([a-zA-Z][0-9_.]){4,26}$",$username)) { return false; } else { echo "username ok"; } ?> 

Благодаря 🙂

Solutions Collecting From Web of "Проверка правильности выражения php"

Вы можете использовать регулярное выражение

 /^(?=[az]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD 

как в

 <?php $username=$_POST['username']; if (!preg_match('/^(?=[az]{2})(?=.{4,26})(?=[^.]*\.?[^.]*$)(?=[^_]*_?[^_]*$)[\w.]+$/iD', $username)) { return false; } else { echo "username ok"; } ?> 
  • ^(?=[az]{2}) обеспечивают строку «Начните с по крайней мере 2 буквы».
  • (?=.{4,26}) гарантирует, что «должно быть от 4 до 26 символов».
  • (?=[^.]*\.?[^.]*$) Гарантирует, что следующие символы содержат не более одного . до конца.
  • Аналогично (?=[^_]*_?[^_]*$) Обеспечивает не более одного _ .
  • [\w.]+$ Совершает совпадение. Он также обеспечивает только буквенно-цифровые символы _ и . будут задействованы.

(Примечание: это регулярное выражение предполагает, что hello_world является допустимым именем пользователя.)

Вы много просите в одном регулярном выражении, это может быть возможно, но это не самый лучший способ, вы хотите сообщить пользователю, почему их имя пользователя является ошибкой.

 function checkUsername($username) { $username = trim($username); if (empty($username)) { return "username was left blank."; }elseif (strlen($username) < 4) { return "username was too short"; }elseif (strlen($username) > 26) { return "username was too long"; }elseif (!preg_match('~^[az]{2}~i', $username)) { return "username must start with two letters"; }elseif (preg_match('~[^a-z0-9_.]+~i', $username)) { return "username contains invalid characters."; }elseif (substr_count($username, ".") > 1) { return "username may only contain one or less periods."; }elseif (substr_count($username, "_") > 1) { return "username may only contain one or less underscores."; } return true; } 

Затем, чтобы проверить, что вы сделали бы:

 $validUsername = checkUsername($username); if ($validusername !== true) { echo "An error occured: " . $validUsername; } 

Таким образом, пользователь знает, что произошла ошибка, и может упростить ее, вместо того, чтобы быть слепым к ошибке. Также вы должны прекратить использовать ereg, который был амортизирован, вместо этого используйте preg_match .

УКАЗАНИЕ использования! == для проверки, это также проверяет тип, так как он может возвращать строку (которая вернет true со свободным сравнением). Просто FYI.

Часть, где вы сказали:

и одно подчеркивание и одна точка

чтобы быть честным!

Я бы сделал что-то вроде:

 if(!eregi('^[a-zA-Z]{2}$', substr(0,2))) { // .... check for only 2 dots here later .... }