Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex PHP IF包含和限制_Php_Regex_Preg Match_Conditional - Fatal编程技术网

Regex PHP IF包含和限制

Regex PHP IF包含和限制,php,regex,preg-match,conditional,Php,Regex,Preg Match,Conditional,我有这个正则表达式,我使用PHP preg_match来过滤用户名。 我想创造条件: 最小3个字符,必须以a-zA-Z开头 不能以下划线结尾 如果字符串包含下划线“u”,则下一个下划线应为a-zA-Z0-9(例如a_3,hello_w),基本上这将防止用户名包含多个下划线,例如a_h。但重复的下划线,例如“h”和“t”并不是问题 下划线是可选的 用户名只能包含a-zA-Z0-9和下划线 这是我的代码: /^(?=.{3})[A-Za-z][A-Za-z0-9](?:([A-Za-z0-9]+

我有这个正则表达式,我使用PHP preg_match来过滤用户名。 我想创造条件:

  • 最小3个字符,必须以a-zA-Z开头
  • 不能以下划线结尾
  • 如果字符串包含下划线“u”,则下一个下划线应为a-zA-Z0-9(例如a_3,hello_w),基本上这将防止用户名包含多个下划线,例如a_h。但重复的下划线,例如“h”和“t”并不是问题
  • 下划线是可选的
  • 用户名只能包含a-zA-Z0-9和下划线
这是我的代码:

/^(?=.{3})[A-Za-z][A-Za-z0-9](?:([A-Za-z0-9]+)[A-Za-z0-9]$/

我也尝试了其他一些方法。不知何故,某些有效字符串不匹配。 如果有人能帮助我,也请向我解释一下?:和之间的区别=

我试过的字符串:

  • 测试123
  • 测试_1(这一个不适用于上面的代码)我试图放置 {1,}但是其他一些测试字符串不匹配
  • 测试单元a1
  • 德斯图12
  • h1_h1
  • t11
  • t11a
尝试下面的正则表达式:

if (preg_match('/^[a-z]((?!__)[a-z\d_])+[a-z\d]$/i', $str)) {
  echo 'matched';
}

所以我不能使用我的首选用户名?这是为什么?比如你喜欢的用户名?我只想只允许下划线和一些其他字符。允许用户想要的任何东西有什么错?避免混淆,也避免不必要的字符到他们的用户名,这实际上不是一个好的用户名。谢谢你,你不需要我作为你网站的用户,这很公平。谢谢。你能给我解释一下什么是(?)?如果我想允许更多字符,如连字符,那么我只需要这样更改?-->/^[a-z]((?!)(?!--)[a-z\d-]+[a-z\d]$/i@user3562733not在字符串中包含两个下划线。您好,如果我想限制最多20个字符,我应该放什么?@user3562733将
+
更改为
{1,18}