PHP有许多内置函数来验证数字,但它们都希望以计算机格式输入:1234.56
。我需要验证1,234.56
(英语)或1.234,56
(西班牙语)等内容,以及一些典型属性(可接受的范围,最大小数位数等)。
我开始写自己的功能,但很快就迷路了。将读取用户输入变为浮点变量很容易,但我希望能够检测出1,23456.7
或1..25
等无效格式的数字。
你对这个问题有什么建议吗?
(预先知道十进制和一千个字符,将数字组硬编码为三个是可以的,不需要覆盖Indian number format。)
答案 0 :(得分:3)
结帐NumberFormatter::parse
。您可以使用它解析许多语言环境中的数字。整个intl扩展很有用,即使它还没有“存在”。
答案 1 :(得分:1)
我在php手册的评论中发现了一个有趣的功能:http://fr2.php.net/manual/en/language.types.float.php#92885 看看。
答案 2 :(得分:1)
您可以使用正则表达式来验证数字:
$ds = '.'; // Decimal separator
$ts = ','; // Thousand separator
$isValidFloat = preg_match(
'/^
# Integer part, one of the two allowed formats:
# 1) with thousand separator, grouped by 3 digits
# 2) without thousand separator
(\d{1,3}(' . preg_quote($ts) . '\d{3})* | \d+)
# Optional decimal part
(' . preg_quote($ds) . '\d+)?
$/x', $string);
并将其转换为这样的浮点数:
$float = (float) strtr($string, array($ts => '', $ds => '.'));
答案 3 :(得分:1)
除了给定的解决方案,我还建议使用PEAR Validation package来验证数字。
以下是他们网站的一个例子:
<?php
require_once 'Validate.php';
$number = '-8,1';
if (Validate::number($number,
array('decimal' => '.,', 'min' => -9, 'max' => -7 ))) {
echo 'Valid';
} else {
echo 'Invalid';
}
如果你想对格式更严格,那么你可以将它解析为float(你已经完成),然后使用number_format将float输出为你接受的格式,并尝试匹配原始格式与您生成的任何格式相对应。
答案 4 :(得分:-1)
您执行所有计算和结果变量,您可以使用内置函数 number_format
根据您的要求对其进行格式化。