2013-12-10 83 views
1

我需要帮助与preg匹配/替换forma我真的不能理解它的工作方式以及每个元素在做什么。Preg match和Preg替换特定格式

到目前为止,我有这样的:

$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和Google的研究,但不能让它像我想我不明白。 我使用了RegEx网站并试图构建,但没有成功。

所以到现在为止,我得到这个:

用户可以把5-12字母/数字特殊字符。

我要的是:

  • 能否5-12字母/数字没有特别charcaters之间的输入 - 我 已经拥有了它。
  • 允许空格
  • preg_match如果没有混合语言的像E.G:$ username = santadvders 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'; 
     } 

解决,谢谢。

回答

1

我敢肯定,如果在你的用户名允许空格,你可以只用一个空格字符足以但为了安全起见使用\s相匹配的空白(\n\r\t\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"; 
} 
+0

是啊。 E.G:你用用户名= hwnd - 可以。你使用的用户名=רביב - 它的好。但如果你使用username = hwרב - 它不允许没有混合语言 – Ravg

+0

好吧,我试了它,它不好,它总是假的,即使我混合,即使我不混合,我试图用rubular.com解决它,但你不明白为什么?并用最新的代码编辑你的答案。 – Ravg

1

preg_replace从用户名删除空白的罚款。

要只允许英文字母,数字和空格的用户名,使用此:

if (preg_match('/^[a-zA-Z0-9\s]{5,12}+$/u', $username)) { 
    # $username is OK 
} 
else { 
    # $username is not OK 
} 
+0

我不想只允许英语,我想不允许在英语和西班牙语等用户名混合语言只是例如任何想法? – Ravg