我有这个 PHP 正则表达式:
$username = preg_replace('/[^a-z0-9]/i', '', $username);
它只允许A-Z
和0-9
。我怎么能允许.
,-
以及_
?
我有这个 PHP 正则表达式:
$username = preg_replace('/[^a-z0-9]/i', '', $username);
它只允许A-Z
和0-9
。我怎么能允许.
,-
以及_
?
您可以使用以下正则表达式:
/[^a-z0-9._-]/i
/[^a-zA-Z0-9._-]/
/[^a-z0-9.\-_]/
我们在哪里转义连字符很简单,只需将这些字符也添加到正则表达式中
$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)
这 。需要转义,因为它是“matchall”字符,最后是 - 因为否则它将用于定义范围(我们当然可以转义它)。
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
删除不属于( [^]
) 组中字符之一的任何内容。注意 hypern 是最后一个,所以它失去了它的特殊含义。
如果您确切知道需要匹配什么,只需在字符组中指定它。破折号需要在最开始或最结束。
/[A-Z0-9._-]/
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
您当前的代码实际上确实允许A-Z
和a-z
-i
标志将您的正则表达式标记为不区分大小写。
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
尝试
$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);