2014-10-07 144 views
0

我是新來的PHP開發(我用我自己的學習像許多我認爲)和正則表達式,我已經等了下面的函數在PHP文件:PHP正則表達式不會匹配

function func($data) { 

    $posData = preg_replace('/([^.0-9]+)/', '', $data); // This should remove everything but periods and numbers. 

    if (preg_match('/^([01][0-9]|20|[01][0-9][.][0-9]{1,2}|0[.][0-9]{1,2})\z/' , $posData)) { 
    return $posData; 
    } 
    else { 
    return false; 
    } 
} 

這應該匹配例如:20 | 0.25 | 12 | 08.54 | 15.6,這不應該匹配0,7.12,高於20的任何值或最後一個週期。如果我在regex101.com上檢查它,它工作正常,如果我在同一頁面上運行此功能,但沒有功能並且預先建立的數據工作正常。但是當我通過一個表單發送數據並使用這樣的php文件時:

<?php 
    include_once'/path/to/functions.php'; 

    $text = $_POST['text']; 

    if ($a = func($text) !== false) { 
     $b = func($text); 
     echo $b; 
    } 
    else { 
     echo "Failed"; 
    } 
?> 

It matches 20 | 01 | 12和99(不應該),但不匹配例如:0.58 | 12.45 | 08.65,我無法讓它工作。我只是不明白爲什麼會發生這種情況。

PD:我不是英語母語的人,所以我很抱歉有任何拼寫錯誤或任何語言的語法錯誤。此外,如果有人可以幫助我使我的正則表達式更快或更短一點,將非常感激。

+0

'[^ .0-9]'對應於除新行以外的任何符號。退出點'\ .' – Cheery 2014-10-07 22:26:36

+0

「如果我在regex101.com上檢查它可以正常工作」 - - 是嗎? http://regex101.com/r/yK2cX1/1 – zerkms 2014-10-07 22:27:45

+3

@Cheery:在用作角色類時不需要被使用。關於'[^ .0-9]'的第一個陳述也是錯誤的 – zerkms 2014-10-07 22:28:03

回答

-1

嗯,我真的不知道爲什麼,但我解決了所有這個問題,每次我在我的功能上做了一個步驟時,都會回顯一個包含文本變量的javascript警報消息。然後我上傳了我的功能頁面到我的服務器,關閉了我的瀏覽器,清理了所有的瀏覽器數據,然後我再次打開它,並試圖運行一個不良數據的表單檢查,例如:99,它通過所有過程警報。然後我嘗試了一個很好的數據,例如:08.20,它沒有提示任何消息,並且函數輸出是錯誤的。所以我想通了,什麼是錯的頁面緩存或類似的東西(我不知道那是什麼),所以我決定把一些HTML標籤:

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta http-equiv="Cache-control" content="no-cache"> 
    </head> 
    <body> 
    <?php 

     // Include functions.php 
     // Get POST values. 
     // POST data checking code 
     // Echo checking result 

    ?> 
    </body> 
</html> 

而問題就迎刃而解了。如果任何人都可以向我解釋爲什麼會發生這種情況,那將會非常有幫助。