利用正则如何防止用户灌水输入?

1、连续的重复字符/数字如:aaaaaa或111111
2、字符串/数字串循环出现,如:abcabcabc或123123123

求正则的写法

小飞
小飞
6832
编辑于2012-03-15
该问题已被保护

保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。

评论 (5)链接2012-02-02 
  • 0 支持
    就像有的网站会检测用户输入过于简单的密码
    不允许11111111111单个字符连续重复,不允许abcabc、123123这样的简易密码
    – 李勇 2012-02-02
  • 0 支持
    什么样的输入算灌水呢?整理一些常用的关键字进行过滤吧 – 小飞 2012-02-02
  • 0 支持
    建立一个过滤库,利用字符串相似度算法,这样会更靠谱点。 – 冯义军 2012-02-03
  • 0 支持
    随机产生的字符咱是没辙的,我们网站很多类似这样的:sagpokkihjaf659035ykjasgfkbgmla – zhupp 2012-02-23
显示更多隐藏的评论

充其量将重复的字母或数字视为所谓的胡乱输入,可以利用 count_chars() 来统计实现。例如:
<?php

$input = '11111111';
if (strlen(count_chars($input, 3)) === 1) {
exit('不要乱填');
}
?>

  
可以通过修改第二个参数让 count_chars() 返回多种形式的统计结果
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-02-02
  • 0 支持
    你这个碰上123123就不好使了 – 打酱油的 2012-02-02

(?:.{1}){2,5}

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-02-02
  • 0 支持
    我试了一下,貌似不好使. – zhupp 2012-02-23

这样
(.+)\1+
php里`双引号要转义\1,单引号不用
/(.+)\1+/

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-02

必须利用正则表达式的区间量词才能完美的解答这个问题
1、连续的重复字符/数字如:aaaaaa或111111
([.])($1){3,1000} .代表任意字符s1代表第一个括号产生的值 在perl中!!然后区间量词修饰$1的出现次数 此处为 3-1000次
2、字符串/数字串循环出现,如:abcabcabc或123123123
([.]{2,1000})($1)(2,1000)

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-09-13

你这个重复输入防止灌水,可以在数据库是列一些常用的不允许注册的用户名,然后在注册时进行检测,不建议你用正则去判断,因为这样对用户不友好,而且也很难判断是否为真正的灌水用户,很多用注册机注册的用户根本就不是重复的用户名,最好的办法就是设置同一个IP允许注册的最小时间,一般论坛都是这样做的。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-02-02
  • 0 支持
    IP不是可以伪造的么? – zhupp 2012-02-23
  • 0 支持
    这里说的只是“如何防止用户灌水输入”,是问的如何防止用户随便输入,不是机器人注册,机器人注册还需要考虑很多。 – 浪际天涯 2012-02-23
德问是一个专业的编程问答社区,请 登录注册 后再提交答案