2013-12-10 125 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