我需要preg-match/replace-forma的帮助,我真的不明白它是如何工作的,每个元素都在做什么。
到目前为止,我有这个:
$username = preg_replace('/'s+/', '_', $_POST['uname']);
if(preg_match('/^[a-zA-Z0-9]{5,12}+$/u', $username))
{
$username = trim(strip_tags(ucfirst($purifier->purify(@$_POST["uname"]))));
}
else
{
$message['uname']='wrong username input';
}
对于utf8(希伯来语),我得到了这个:
if(preg_match("/^['p{Hebrew} a-zA-Z0-9]{2,10}+$/u", $_POST['fname']))
{
//
}
这是完美的工作,但我不想允许希伯来语用户名只有英语。
我试着用多种组合来处理它,我试着改变,但没有成功,我对StackOverflow和谷歌进行了研究,但不能让它变成我想要的——我不明白。我使用了一个RegEx网站,并试图建立,但没有成功。
所以直到现在我得到了这个:
用户可以输入5-12个没有特殊字符的字母/数字。
我想要的是:
- 可以输入5-12个字母/数字,无需特殊字符-i已经拥有了
- 允许空白
preg_match
,如果没有像E.G:$username=Şددsdsd这样的混合语言<-不允许使用混合语言
和preg_replace
到:
- 将空白替换为零(删除空白)我有这个,但我不知道它是否正确:
$username = preg_replace('/'s+/', '', $_POST['uname']);
此外,我正在使用UTF-8语言。
编辑:
在hwnd的帮助下,我让它像我想要最新代码一样工作:
if(preg_match('/^['p{Hebrew}]{2,10}|[a-zA-Z]{2,10}$/u', $_POST['fname']) && preg_match('/^[a-zA-Z]{2,10}|['p{Hebrew}]{2,10}$/u', $_POST['fname']))
{
$message = 'valid';
}else{
$message = 'Invalid';
}
已解决,谢谢。
我相信,如果您在用户名中允许空白,您只需要一个空格字符就足够了,但为了安全起见,可以使用与空白('n
、'r
、't
、'f
和" "
)匹配的's
,为此,您可以将其添加到字符类[]
中
if (preg_match('/^[a-zA-Z0-9's]{5,12}+$/u', $username)) { ...
你可以把你的preg_replace()
功能保持原样…
更新:要匹配不同的字符,但不能混合,您可以尝试以下操作:
$user = 'hwדגדשרביd'; // "invalid"
$user = 'fooo'; // "valid"
$user = 'שדגדשרביב'; // "valid"
if (preg_match('/^['p{Hebrew}]{2,10}|[a-zA-Z]{2,10}$/u', $user)) {
echo "valid";
} else {
echo "invalid";
}
您的preg_replace
可以从用户名中删除空白。
要在用户名中只允许英文字母、数字和空白,请使用以下命令:
if (preg_match('/^[a-zA-Z0-9's]{5,12}+$/u', $username)) {
# $username is OK
}
else {
# $username is not OK
}