PHP RegEx以防止重复字符

时间:2012-07-03 23:03:37

标签: php regex

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

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

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

2 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:2)

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

即,

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

这不是你要求的支票,这是和...一起计算的,所以两个点或两个破折号被认为是有效的。但它可以快速轻松地扩展到更多角色。