我是新來的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-9]'對應於除新行以外的任何符號。退出點'\ .' – Cheery 2014-10-07 22:26:36
「如果我在regex101.com上檢查它可以正常工作」 - - 是嗎? http://regex101.com/r/yK2cX1/1 – zerkms 2014-10-07 22:27:45
@Cheery:在用作角色類時不需要被使用。關於'[^ .0-9]'的第一個陳述也是錯誤的 – zerkms 2014-10-07 22:28:03