php Preg_match允许用户名中包含单引号字符

jmo0nnb3  于 2023-03-16  发布在  PHP
关注(0)|答案(2)|浏览(168)

我的代码:
preg_match("/^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])[0-9A-Za-z!@#$%^&_ -\\\']{3,48}$/", $hostname)
我希望网站接受的用户名如下:John's Pub.目前,这种方法可以工作,因为它允许使用单引号('),但也接受(\)。
我已经尝试过单引号本身,用1 \和2 \,但这些都不起作用。

cbwuti44

cbwuti441#

要针对您的问题,您可以尝试以下操作:

preg_match('/\A(\w*[\'\(\)]*\w*\s*\w*)+\z/', $$hostname);

其中:

  • \A表示字符串开始
  • \w表示任何单词字符(字母、数字、下划线)
  • *表示0次或0次以上(前缀为*,这里前缀为\w
  • \'表示允许字符',类似地,\(\)用于定义允许的字符
  • []是组运算符
  • \s表示空白
  • \z表示字符串结束

希望这能有所帮助
编辑:You can try your custom regex here as well

nhhxz33t

nhhxz33t2#

您有几个问题:
1.使用不区分大小写的标志代替[A-Za-z]
1.你不能把-放在[]中。阻止它意味着范围!转义它。
1.不要使用\\\',它意味着\',这会导致什么都不对!
1.使用\w而不是0-9A-Za-z,这样更简单。
试试这个:

preg_match("/^[\w!@#$%^&_ \-']{3,48}$/i", $hostname)

如果您也希望允许\字符,请使用以下命令:

preg_match("/^[\w!@#$%^&_ \-'\\\\]{3,48}$/i", $hostname)

如果您也希望允许使用()字符,请使用以下命令:

preg_match("/^[\w!@#$%^&_ \-'\(\)]{3,48}$/i", $hostname)

所有组合:

preg_match("/^[\w!@#$%^&_ \-'\(\)\\\\]{3,48}$/i", $hostname)

相关问题