我需要验证输入到 PHP 生成的表单中的测量值。
我打算将它们与控制上限和下限进行比较,并决定它们是失败还是通过。
作为第一步,我想象一个 PHP 函数,它接受代表工程测量的字符串,并在比较之前将它们转换为纯数字。
目前我只期望测量小电压和电流,所以字符串像
“1.234uA”、“2.34 nA”、“39.9mV”。或“-1.003e-12”
将转换为
分别为 1.234e-6、2.34e-9、3.99e-2 和 -1.003e-12。
但是该方法应该可以推广到任何测量的量。
我需要验证输入到 PHP 生成的表单中的测量值。
我打算将它们与控制上限和下限进行比较,并决定它们是失败还是通过。
作为第一步,我想象一个 PHP 函数,它接受代表工程测量的字符串,并在比较之前将它们转换为纯数字。
目前我只期望测量小电压和电流,所以字符串像
“1.234uA”、“2.34 nA”、“39.9mV”。或“-1.003e-12”
将转换为
分别为 1.234e-6、2.34e-9、3.99e-2 和 -1.003e-12。
但是该方法应该可以推广到任何测量的量。
function convert($value) {
$units = array('p' => 'e-12',
'n' => 'e-9',
'u' => 'e-6',
'm' => 'e-3');
$unitstring = implode("", array_keys($units));
$matches = array();
$pattern = "/^(-?(?:\\d*\.\\d+)|(?:\\d+))\s*([$unitstring])([a-z])$/i";
$result = preg_match($pattern, $value, $matches);
if ($result)
$retval = $matches[1].$units[$matches[2]].$matches[3];
else
$retval = $value;
return $retval;
}
因此,要解释上述内容的作用:
当然你可以调整一些东西,但总的来说这是一个好的开始。希望能帮助到你。
在您的函数
中,首先您需要初始化单位的值,例如 -6 表示 u,-3 表示 m...等
将字符串划分为 Number 和 Unit(即 micro(u)、mili(m) 等)。
然后说输入的 no 是 NUM;单位是 UNIT ..(char like u,m etc);
while(NUM>10)
{
NUM=NUM/10;
x++; //x is keeping track of the DOT.
}
UNIT=UNIT+x; //i.e UNIT is increased(for M,K,etc) or decreased(for u,m,etc)
echo NUM.e.UNIT;
也许它会做!
我自己可能头脑简单的方法是在 preg_replace 中使用一系列模式
function convert($value) {
$result = preg_replace($patterns, $replacements, $value);
return $result;
}
在哪里
$patterns = array('/p[av]/i', '/n[av]/i', '/u[av]/i', '/m[av]/i');
$replacements = array('e-12', 'e-9', 'e-6', 'e-3');
并且它可以扩展到更高的前缀,但是继续向 $patterns 数组添加越来越复杂的正则表达式似乎很笨拙。
编辑:稍后的比较应该将返回值解释为实数。
我希望有人可以提出更优雅的建议。