2014-02-26 67 views
0

我試圖找到檢查一個字符串是否包含任何「怪異」的UTF-8字符的最佳方法。正則表達式來檢查一個字符串是否包含字母或數字

基本上我正在尋找的東西,可以防止所有可以隱藏在一個字符串中的所有不同的UTF 8控制符號非空白空間。當我說隱藏時,我暗示,在屏幕上打印字符串將不會顯示這些字符。他們要麼是空格,要麼是空白字符。

我解決這個以前的方法是返回true如果字符串的字符中的一個:

function isUnusualString($string) { 
    if($string == "") 
     return TRUE; 

     $char = ord($string); 

     if($char < 33) 
     return TRUE; 
     if($char > 8191 && $char < 8208) 
     return TRUE; 
     if($char > 8231 && $char < 8240) 
     return TRUE; 

     switch($char) { 
     case 160: // Non-Breaking Space 
     case 8287: // Medium Mathematical Space 
      return TRUE; 
      break; 
     } 
    return FALSE; 
    } 

然而,這沒有捕捉到所有的情況下,我不知道爲什麼。我假設你可以有一些長度超過1或長度爲0的字符。

接下來我嘗試迭代字符串的字符並檢查字符串是否包含任何「隱藏」字符。

例如運行下面的代碼:

 function isUnusualUTF($string) { 
     if($string == "") 
     return TRUE; 

    $strlen = strlen($string); 

    for ($i = 0; $i < $strlen; ++$i) { 
    $char = ord($string[$i]); 

    if($char < 33) 
     echo "char = ".$char." at index: ".$i." is < 33"; 


    if($char > 8191 && $char < 8208) 
     echo "char = ".$char." at index: ".$i." is >8191 and < 8240 "; 


    if($char > 8231 && $char < 8240) 
     echo "char = ".$char." at index: ".$i." is > 8231 and < 8240 "; 


    switch($char) { 
    case 160: // Non-Breaking Space 
    case 8287: // Medium Mathematical Space 
     echo "cases<br>"; //return TRUE; 
     break; 
    } 
    } 
    return FALSE; 
} 

$string = "Unicode "; 
echo isUnusualUTF($string); 

輸出:

char = 32 at index: 7 is < 33 

我認爲要做到這一點,最好的辦法是與做一個正則表達式:

if string has (numbers or letters or " " or other symbols 
       that can be printed and seen in the screen) 
    return true 
else 
    return false 

謝謝

+0

您是否嘗試過通過人物的循環? –

+0

只允許ASCII字符工作嗎? – Mike

+0

@DaveChen我剛剛編輯的帖子,包括我的第二種方法。 –

回答

1

在PHP中可以使用正則表達式來找到特定的字符

\ p {XX}(含)

:使用這些逃逸屬性3210

\ P {xx}(獨家)

其中xx是您正在查找的某個屬性。

這裏是屬性的列表:http://php.net/manual/en/regexp.reference.unicode.php

我想對於你的情況,你會想塑造一個說法是這樣的:

[\ p {XX} \ p {} YY .. etc] +

其中「... etc」是符號並代表附加屬性。這應該匹配你正在尋找的所有角色。

這裏有一個鏈接,以測試你的正則表達式語句:http://www.phpliveregex.com/

+0

是的正則表達式絕對是正確的方向。順便說一句,我想知道是否不存在這種類型的過濾已經存在的解決方案... – inf3rno

相關問題