我的代码:preg_match("/^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])[0-9A-Za-z!@#$%^&_ -\\\']{3,48}$/", $hostname)我希望网站接受的用户名如下:John's Pub.目前,这种方法可以工作,因为它允许使用单引号('),但也接受(\)。我已经尝试过单引号本身,用1 \和2 \,但这些都不起作用。
preg_match("/^(?=.*[a-zA-Z].*[a-zA-Z].*[a-zA-Z])[0-9A-Za-z!@#$%^&_ -\\\']{3,48}$/", $hostname)
cbwuti441#
要针对您的问题,您可以尝试以下操作:
preg_match('/\A(\w*[\'\(\)]*\w*\s*\w*)+\z/', $$hostname);
其中:
\A
\w
*
\'
'
\(
\)
[]
\s
\z
希望这能有所帮助编辑:You can try your custom regex here as well
nhhxz33t2#
您有几个问题:1.使用不区分大小写的标志代替[A-Za-z]1.你不能把-放在[]中。阻止它意味着范围!转义它。1.不要使用\\\',它意味着\和',这会导致什么都不对!1.使用\w而不是0-9A-Za-z,这样更简单。试试这个:
[A-Za-z]
-
\\\'
\
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)
2条答案
按热度按时间cbwuti441#
要针对您的问题,您可以尝试以下操作:
其中:
\A
表示字符串开始\w
表示任何单词字符(字母、数字、下划线)*
表示0次或0次以上(前缀为*
,这里前缀为\w
)\'
表示允许字符'
,类似地,\(
和\)
用于定义允许的字符[]
是组运算符\s
表示空白\z
表示字符串结束希望这能有所帮助
编辑:You can try your custom regex here as well
nhhxz33t2#
您有几个问题:
1.使用不区分大小写的标志代替
[A-Za-z]
1.你不能把
-
放在[]
中。阻止它意味着范围!转义它。1.不要使用
\\\'
,它意味着\
和'
,这会导致什么都不对!1.使用
\w
而不是0-9A-Za-z
,这样更简单。试试这个:
如果您也希望允许
\
字符,请使用以下命令:如果您也希望允许使用
()
字符,请使用以下命令:所有组合: