просто быстрый вопрос am abit rubish с регулярным выражением, поэтому я думал бы разместить здесь. Ниже приведено регулярное выражение для подтверждения имени пользователя.
Должно быть от 4 до 26 символов
Начните с по крайней мере двух букв
У меня это до сих пор, но не работает
<?php $username=$_POST['username']; if (!eregi("^([a-zA-Z][0-9_.]){4,26}$",$username)) { return false; } else { echo "username ok"; } ?>
Благодаря 🙂
Вы можете использовать регулярное выражение
/^(?=[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 .... }