我需要帮助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个字母/数字无特殊字符。
我想要的是:
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';
}
解决下,由于
答案 0 :(得分:1)
我确定如果您在用户名中允许使用空格,只需空格字符即可,但要安全使用与\s
,\n
{\r
匹配的\t
{1}},\f
和" "
),您可以将其添加到角色类[]
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";
}
答案 1 :(得分:1)
您的preg_replace
用于从用户名中删除空格。
要仅在用户名中允许使用英文字母,数字和空格,请使用:
if (preg_match('/^[a-zA-Z0-9\s]{5,12}+$/u', $username)) {
# $username is OK
}
else {
# $username is not OK
}