if(preg_match("%(?=.{8})[A-Za-z0-9]([.-]{0,1})%", stripslashes(trim($_POST['username']))))
我希望用户名至少是 8 个字符 A-Za-z0-9 ,只有 1 。或 1 - 。我该如何实施?我的代码允许“.......”的用户名有效。<-不想那样。
顺便说一句:“。” 或“-”是可选的。
有时,正则表达式并不是适合这项工作的工具。
$username = stripslashes(trim($_POST['username']));
if(preg_match('/^[a-zA-Z0-9.-]{8,}$/', $username)
&& substr_count($username, '-') <= 1
&& substr_count($username, '.') <= 1) {
# It's valid.
}
一个快速的补丁是在第一次检查后计算这些字符。
IE,
if (strlen(preg_replace("#[^.-]#", '', $username)) > 2)
// Not valid.
这不是您要求的支票,这将 .'s 和 -'s 一起计算,因此两个点或两个破折号将被视为有效。但它可以快速轻松地扩展到更多字符。