使用 preg_match 禁用某些字符
Disabling some characters with preg_match
我的注册页面有问题,我注意到人们可以使用类似“ªµµª” 的替代代码注册,我尝试使用 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))
但我显然做错了什么...
显然,您混淆了插入符 (^) 元字符的两种不同用法。
的确,正则表达式中可能是两件事:
- 它可能会断言主题的开头,这可能是您想要的。
- 它可能会否定 class,这就是您在代码中所做的。
来源: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);
}
我的注册页面有问题,我注意到人们可以使用类似“ªµµª” 的替代代码注册,我尝试使用 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))
但我显然做错了什么...
显然,您混淆了插入符 (^) 元字符的两种不同用法。
的确,正则表达式中可能是两件事:
- 它可能会断言主题的开头,这可能是您想要的。
- 它可能会否定 class,这就是您在代码中所做的。
来源: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);
}