Tim*_*ker 50
我猜你真正想要的是一种从数字中分辨任何数字作为货币价值的方法.因此,可能不应该匹配,也不应该还是,即使所有的当然数字的.1.04e-7
1.234
12.3
最后,你不得不期待数千个分隔符1,234.56
(像小数点一样,也可能在区域设置之间有所不同).因此,假设您只想使用点作为小数点分隔符来检查货币值,并将逗号作为可选的千位分隔符,请尝试以下操作:
/\b\d{1,3}(?:,?\d{3})*(?:\.\d{2})?\b/
Run Code Online (Sandbox Code Playgroud)
说明:
\b # word boundary assertion
\d{1,3} # 1-3 digits
(?: # followed by this group...
,? # an optional comma
\d{3} # exactly three digits
)* # ...any number of times
(?: # followed by this group...
\. # a literal dot
\d{2} # exactly two digits
)? # ...zero or one times
\b # word boundary assertion
Run Code Online (Sandbox Code Playgroud)
Mar*_*aio 23
我用这个:
function isCurrency($number)
{
return preg_match("/^-?[0-9]+(?:\.[0-9]{1,2})?$/", $number);
}
//usage examples
echo (isCurrency("10.36") ? "TRUE" : "FALSE");
echo (isCurrency(10.3) ? "TRUE" : "FALSE");
Run Code Online (Sandbox Code Playgroud)
提防:
此函数也接受负货币值,如果您不想接受它们,请删除-?
您在开头找到的货币值preg_match
这个函数返回TRUE
也像值13.7
(仅保留一位小数),如果你想十进制是总有两个不是替换{1,2}
用{2}
(但在此之前做这个读取点3下)
此函数TRUE
也返回值0000.78
(多个前导零),但通常需要这种函数来过滤表单提交的值,然后再将它们插入到类型的DB字段中DECIMAL(n.2)
.当在这些类型的字段中插入时,MySQL接受这两个字段0000.78
并将其13.7
作为查询中的有效值,并自动将它们转换为0.78
和13.70
你不能确定。用户可能会想到鸡。您需要检查用户是否输入了浮点数。看看 preg_match: https://www.php.net/manual/en/function.preg-match.php
您还需要问自己是否要尝试使用用户输入的内容,或者是否要拒绝它并仅接受精确的格式。