Regex PHP IF包含和限制


Regex PHP IF contains and limit

我有这个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';
}