2013-08-26 57 views
0

我有一個文本區域中的文本,其中包含4個必要的字符串。在我將這些文本插入數據庫之前,我會檢查是否存在這些字符串。使用preg_match很多時間來檢查字符串是否在文本

是否有比4 preg_match操作更好的替代方法,或許使用preg_match_all

如果我想用其他東西替換那些4 strings,那麼preg_replacestr_replace之間的區別在哪裏。我應該使用哪個?

這裏我的代碼:

if(isset($_POST['text'])){ 
    $text= $link->real_escape_string($_POST['text']); 

    $string = $text; 
    $pattern1 = '/LIMITE_TYPE/'; 
    $pattern2 = '/LIMITE_SET/'; 
    $pattern3 = '/TODAY_PRICE/'; 
    $pattern4 = '/AUTO_SIGN/'; 

    if(preg_match($pattern1, $string) 
     && preg_match($pattern2, $string) 
     && preg_match($pattern3, $string) 
     && preg_match($pattern4, $string)) 
    { 
     echo 'ok'; 
    }else{ 
     echo 'not found'; 
    } 

    die(); 
} 

回答

1

如果你只是要檢查的原話存在,你不需要使用正則表達式,使用strpos而不是更快:

$word1 = 'LIMITE_TYPE'; 
$word2 = 'LIMITE_SET'; 
$word3 = 'TODAY_PRICE'; 
$word4 = 'AUTO_SIGN'; 

if ((strpos($string, $word1) 
    && strpos($string, $word2) 
    && strpos($string, $word3) 
    && strpos($string, $word4))!==false) { 

但如果你真的需要的模式(與正則表達式的內部功能):

$patterns = array('~\bLIMITE_TYPE\b~', 
        '~\bLIMITE_SET\b~', 
        '~\bTODAY_PRICE\b~', 
        '~\bAUTO_SIGN\b~'); 
$found = true; 
foreach($pattern as $pattern) { 
    if (!preg_match($pattern, $string)) { 
     $found = false; 
     break; 
    } 
} 
echo ($found)? 'ok' : 'not found'; 

這些代碼的優點是測試停止在第一個錯誤結果。

1

您可以更快str_pos搜索:

$string = $text; 
$pattern1 = 'LIMITE_TYPE'; 
$pattern2 = 'LIMITE_SET'; 
$pattern3 = 'TODAY_PRICE'; 
$pattern4 = 'AUTO_SIGN'; 

$patterns = array($pattern1, $pattern2, $pattern3, $pattern4); 

if (strpos($pattern1, $text) && strpos($pattern2, $text) ... etc) 
{ 
    str_replace($patterns, $string, $text); //replace patterns with string on text 
} 

我認爲這是更快的方式,但不知道爲什麼。

1

沒有函數可以在一次調用中做你想做的事情,但你可以使用一個循環,這也使得替換更容易。 你也不需要正則表達式,正常的字符串函數已經做你需要的東西

$string = $text; 
$patterns = array(
    'LIMITE_TYPE' => 'REPLACEMENT1', 
    'LIMITE_SET' => 'REPLACEMENT2', 
    'TODAY_PRICE' => 'REPLACEMENT3', 
    'AUTO_SIGN' => 'REPLACEMENT4' 
); 

// check if they are all there: 
$valid = true; 
foreach($patterns as $pattern => $replacement) 
{ 
    if(strpos($string, $pattern) === false) { 
     $valid = false; 
     break; 
    } 
} 
if($valid) 
{ 
    // replace them 
    foreach($patterns as $pattern => $replacement) 
    { 
     $string = str_replace($pattern, $replacement, $string); 
    } 
} 
else 
{ 
    // not valid 
} 
相關問題