我的注册页面有问题,我注意到人们可以注册alt代码,例如“ªμ쪔,我试图通过使用preg_replace修复它,但是当我这样做的时候我不能再注册了,至少没有全球字母
final public function validName($username)
{
if(strlen($username) <= 25 && ctype_alnum($username))
{
return true;
}
return false;
}
试图通过替换它来修复它
if(strlen($username) <= 25 && preg_match("/[^a-zA-Z0-9]+/", $username))
但我显然做错了什么......
答案 0 :(得分:1)
显然,你混淆了插入符号(^)元字符的两种不同用法。
事实上,正则表达式中可能有两件事:
来源:http://php.net/manual/en/regexp.reference.meta.php
以下是您的代码的修改版本,带有插入符号(^)和美元($)符号来断言您正在分析的字符串的开头和结尾:
function validName($username)
{
if (strlen($username) <= 25 && preg_match("/^[a-zA-Z0-9]+$/", $username))
{
return true;
}
return false;
}
$names = array(
'Abc1',
'Abc$',
"ªµµª"
);
foreach ($names as $name) {
echo "<br>" . $name . ': ' . (validName($name) ? 'valid' : 'invalid');
}
// -- Returns:
// Abc1: valid
// Abc$: invalid
// ªµµª: invalid
请注意,您可以将函数内的代码减少到一行:
function validName($username)
{
return strlen($username) <= 25 && preg_match("/^[a-zA-Z0-9]+$/", $username);
}