【问题标题】:PHP validate string only contains '0-9', '.', '*', '/', '-', '+' for a calculator?PHP验证字符串只包含'0-9','.','*','/','-','+'用于计算器?
【发布时间】:2014-11-05 12:50:32
【问题描述】:

我正在尝试为一个 php 计算器编写代码,该计算器从左到右按操作顺序编写简单的语句,例如:

$equation = '5.2 + 3.36 * 0.80';
while(!is_Numeric($equation))
{
   //perform operation
}

但如果有人键入的值不是'0-9', '.', '*', '/', '-', '+' 之一,while 语句将永远不会退出。 while 之前的 if(preg_match()) 可以解决问题,但我不太熟悉如何使用它

【问题讨论】:

  • 至少,包括您遇到问题的代码。没有它,没有人能帮助你……
  • 小心您的验证。仅仅因为它只包含这些字符并不意味着它是一个有效的等式。例如,以下是“有效”:1.2.3.4 */* - / 0

标签: php if-statement while-loop preg-match calculator


【解决方案1】:

使用这个正则表达式

if (preg_match('~^[0-9.*/+-]+$~', $str)) {
    // ...
}

You don't need to escape other characters than \, -, ^, ] and the delimiter in character classes,你也可以避免逃避大部分这些。

【讨论】:

    【解决方案2】:

    PCRE 是一种非常方便的方法来检查字符串是否只包含给定的字符

    if (preg_match('/^([0-9\.\*\/\-\+])+$/', $string)) { ...
    

    您应该只在 [] 之间传递字符集(转义任何特殊字符),告诉您需要 1 个或多个字符,并告诉它必须以字符集开头和结尾,这意味着整个字符串应该匹配表达式(否则你会匹配部分字符串)

    【讨论】:

    • 我认为 0-9 之后的逗号不应该存在。
    • @steffen 逗号在 OP 发布的原始字符集中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2014-07-29
    • 2015-01-27
    • 2012-09-07
    相关资源
    最近更新 更多