如何检查输入的值是否为货币

Kar*_*mam 16 php regex

如何检查输入的值是否为货币.优选地通过正则表达式或php函数.

(值如1550.50,1500100.75)

Tim*_*ker 50

我猜你真正想要的是一种从数字分辨任何数字作为货币价值的方法.因此,可能不应该匹配,也不应该还是,即使所有的当然数字的.1.04e-71.23412.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)

  • 我第一次看到有人解释他们的正则表达式.A +给你. (14认同)
  • 救生员。如果你想确保整个字符串而不只是一个单词适合这个,以 ^ 而不是 \b 开始,以 $ 而不是 \b 结束。 (2认同)

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)

提防:

  1. 此函数也接受负货币值,如果您不想接受它们,请删除-?您在开头找到的货币值preg_match

  2. 这个函数返回TRUE也像值13.7(仅保留一位小数),如果你想十进制是总有两个不是替换{1,2}{2}(但在此之前做这个读取点3下)

  3. 此函数TRUE也返回值0000.78(多个前导零),但通常需要这种函数来过滤表单提交的值,然后再将它们插入到类型的DB字段中DECIMAL(n.2).当在这些类型的字段中插入时,MySQL接受这两个字段0000.78并将其13.7作为查询中的有效值,并自动将它们转换为0.7813.70


d-_*_*_-b 1

你不能确定。用户可能会想到鸡。您需要检查用户是否输入了浮点数。看看 preg_match: https://www.php.net/manual/en/function.preg-match.php

您还需要问自己是否要尝试使用用户输入的内容,或者是否要拒绝它并仅接受精确的格式。