2
if(preg_match("%(?=.{8})[A-Za-z0-9]([.-]{0,1})%", stripslashes(trim($_POST['username']))))

我希望用户名至少是 8 个字符 A-Za-z0-9 ,只有 1 。或 1 - 。我该如何实施?我的代码允许“.......”的用户名有效。<-不想那样。

顺便说一句:“。” 或“-”是可选的。

4

2 回答 2

4

有时,正则表达式并不是适合这项工作的工具。

$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.
}
于 2012-07-03T23:11:45.723 回答
2

一个快速的补丁是在第一次检查后计算这些字符。

IE,

 if (strlen(preg_replace("#[^.-]#", '', $username)) > 2)
     // Not valid.

这不是您要求的支票,这将 .'s 和 -'s 一起计算,因此两个点或两个破折号将被视为有效。但它可以快速轻松地扩展到更多字符。

于 2012-07-03T23:14:33.133 回答