Php-检查字符串为十进制或分数

Php-检查字符串为十进制或分数,php,mysql,Php,Mysql,我有一个输入框,用户可以输入他们下注的赔率。这可以是十进制so->1或6.2 ect或分数形式,例如5/1或13/2 ect 检查这些输入的最佳方法是什么?使用正则表达式,例如^(\d+\/\d+\d+\.\d+\d+)。它匹配1、6.2、5/1和13/2,但不匹配.1、1。等等使用preg_match()函数检查输入是否匹配 $nums = ['1', '6.2', '5/1', '13/2', '.3', 'a']; foreach ($nums as $num) { print "

我有一个输入框,用户可以输入他们下注的赔率。这可以是十进制so->1或6.2 ect或分数形式,例如5/1或13/2 ect


检查这些输入的最佳方法是什么?

使用正则表达式,例如
^(\d+\/\d+\d+\.\d+\d+)
。它匹配1、6.2、5/1和13/2,但不匹配.1、1。等等使用preg_match()函数检查输入是否匹配

$nums = ['1', '6.2', '5/1', '13/2', '.3', 'a'];

foreach ($nums as $num) {
   print "$num:" . preg_match("/^(\d+\/\d+|\d+\.\d+|\d+)/", $num) . "\n";
}

我认为正则表达式是最好的方法

if(preg_match("@^\d*\.?\d+(/\d*\.?\d+)?$@", $value)) {
   echo "$value is valid";
}
此正则表达式允许:.1 | 2.0/54 | 2.3 | 5/.8 | 8/7 | 85.98 |……
如果您还需要
字符(对于某些语言,请使用它),则
“@^\d*[\,]?\d+(/\d*[\,]?\d+?$”


编辑固定的“4/”格

您的规格有点模糊。
.6
有效吗?
-13/2
?和
6.2/33
?是否接受空格,如
13/2
中的空格?好的。1.2.3.4.5..7.8.9都有效吗?不-只接受整部分不“+”或“-“我修剪值以删除任何空格。请参阅下面的答案,它正是这样做的。我真的想知道为什么否决投票?我的回答有什么不正确。。。让我知道我已经采取了上述措施,并添加了一个过滤器,所以,但。如果(preg\u match(“@\d*\.?\d+)(/\d*\.?\d+)$@“,$value)){if(strpos($value)”)!==false和strpos($value,'/')!==false){if(strpos($POST[“赔率”][$i],'/')!==false){$doubs=round(分数(测试输入($POST[“赔率”[$i])),2)}否则,$doubs=test POST[$doubs[$i]];}}否则{$errorMessage.=“
  • 赔率只能是分数或小数!
  • ”;}