我有这个regex,我正在使用PHP preg_match来过滤用户名。我想创造条件:
- 最小3个字符,必须以a-zA-Z开头
- 不能以下划线结尾
- 如果字符串包含下划线"_",那么下一个下划线应该是a-zA-Z0-9(例如a_3、helloww),这基本上可以防止用户名出现多个下划线,例如a_h。但重复的下划线,例如ah_te,不是问题
- Undercore是可选的
- 用户名只能包含a-zA-Z0-9和下划线
这是我的代码:
/^(?=.{3})[A-Za-z][A-Za-z0-9](?:_[A-Za-z-0-9]+)[A-Za-z 0-9]$/
我也尝试了其他一些方法。不知何故,某些有效字符串不匹配。如果有人能帮我,也请向我解释一下两者之间的区别是什么?:并且?=
我试过的字符串:
- 测试123
- test_1(这个不适用于上面的代码){1,},但是其他一些测试字符串不匹配
- 测试_a1
- te_st_12
- h1_h1
- t11
- t11a
尝试以下正则表达式:
if (preg_match('/^[a-z]((?!__)[a-z'd_])+[a-z'd]$/i', $str)) {
echo 'matched';
}