Preg匹配和Preg替换特定格式


Preg match and Preg replace specific format

我需要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
}