2016-10-26 50 views
0

這是我的代碼:我該如何更快地做到這一點?

$valid = true; 
$len = strlen($packet->username); 
if($len > 16 or $len < 3){ 
    $valid = false; 
} 
for($i = 0; $i < $len and $valid; ++$i){ 
    $c = ord($packet->username{$i}); 
    if(($c >= ord("a") and $c <= ord("z")) or 
     ($c >= ord("A") and $c <= ord("Z")) or 
     ($c >= ord("0") and $c <= ord("9")) or $c === ord("_")){ 
     continue; 
    } 
    $valid = false; 
    break; 
} 
if(!$valid or $this->iusername === "rcon" or $this->iusername === "console"){ 
    $this->close("", "§ePlease make sure your username is longer then §a3§e characters\n§eand only uses numbers and letters§7."); 
    return; 
} 

它會檢查用戶名,以確保它是有效的。這段代碼太慢了,它會循環$ len次,這會導致我的主線程中無用的秒數浪費。任何人都知道任何解決方案,使這個更快&可能會刪除循環?

+3

爲什麼不簡單'$ foo = preg_replace('/ [^ A-Za-z0-9 _] /','',$ username); if($ foo!= $ username){die(「Bad char detected」); }' –

+0

哦,那代碼好多了。謝謝。 – Callerap

+0

甚至只是preg_match,如果你沒有字符「badchar-less」版本的樣子。 –

回答

1

使用本:

$username = 'admin'; 

$valid = preg_match('/^[\w\d]{3,16}$/',$username); 

if(!$valid){ 
    echo 'Bad character in your username !'; 
} 

$invalidUsername = array(
    'admin', 
    'root', 
    'localhost' 
); 

if(in_array($username, $invalidUsername)) { 
    echo "Username is not valid !"; 
} 

return true; 
1

簡單的正則表達式:

$valid = (preg_match('/[^A-Z0-9_]/i', $username) === 0); 

檢查任何不是字母/數字/下劃線。如果沒有找到(0匹配),那麼用戶名是有效的。否則它是無效的。

相關問題