2014-04-15 95 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