2014-04-15 98 views
1

我想使用preg_match()在PHP上進行一些模式匹配。我希望我的用戶通過移動設備輸入金額。所以如果他們想輸入50.50,他們可以輸入50 * 50(這裏的星號是手機上實際的星號按鈕)。所以我想檢查一些驗證的輸入。主要爲 1.所有輸入必須爲數字(不包括星號) 2.星號後的小數點數應爲2。 3.小數位是可選的。這意味着用戶可以輸入50或50.50都應該是有效的。preg_replace()可選模式匹配

到目前爲止我所擁有的就是這個。 if(preg_match("_\d{1,6}(\*\d{2})_" , $input) {//do something}。此代碼部分工作,問題是我不能使子模式搜索可選。我看着手冊,但找不到任何東西。我需要幫助謝謝

+1

'+ 1'用於使用非標準分隔符。更多的人需要知道PHP可以這樣做的事實XD個人而言,我使用括號,因爲它們匹配配對,因此不需要轉義「僅僅因爲它是分隔符」。 –

+0

我不認爲它的分界線有問題。 – user3065879

+0

我沒有說這是。我發現你知道使用不同的分隔符是值得讚揚的。 –

回答

1

?)使其成爲可選項。用作量詞的「?」表示「零或一」 - 即。可選的。

作爲一個側面說明,我不知道,有一個瀏覽器,但不要讓你鍵入一個.輕鬆地將任何移動設備......

+0

可能來自90年代的手機。 – tenub

+0

感謝您的回覆。其實它不是一個網絡應用程序。它是一個USSD軟件腳本。我試過了你的建議,但它仍然通過小數點後兩位數以上的輸入(星號) – user3065879

+0

啊,對,在開始和結束時(在分隔符內)使用'^'和'$'來匹配整個串。 –

0
$array = array("50.50", "50", "50*50", "4"); 

foreach($array as $number) 
{ 
if (preg_match('/^[\d]{2}(\.|\*)?([\d]{2})?/sim', $number)) { 
    echo $number ." VALID "; 
} else { 
    echo $number ." INVALID "; 
    //Do something with the invalid number 
} 
} 

輸出:50.50 VALID 50 VALID 50*50 VALID 4 INVALID

DEMO