修改PHP验证脚本以允许现金标记和小数

时间:2014-01-16 02:02:00

标签: php

我有一个用于验证表单的PHP脚本。目前它只允许数字/数字。我有一个尝试修改它的方式,但它出错或得到500错误。我只想添加$和。在提交中。

以下是仅验证数字的工作脚本:

class Quform_Filter_Digits implements Quform_Filter_Interface
{
    /**
     * Whether to allow white space characters; off by default
     * @var boolean
     */
    protected $_allowWhiteSpace = false;

    /**
     * Class constructor
     *
     * @param array $options
     */
    public function __construct($options = null)
    {
        if (is_array($options)) {
            if (array_key_exists('allowWhiteSpace', $options)) {
                $this->setAllowWhiteSpace($options['allowWhiteSpace']);
            }
        }
    }

    /**
     * Filter everything from the given value except digits
     *
     * @param string $value The value to filter
     * @return string The filtered value
     */
    public function filter($value)
    {
        $whiteSpace = $this->_allowWhiteSpace ? '\s' : '';

        $pattern = '/[^0-9' . $whiteSpace .']/';

        return preg_replace($pattern, '', (string) $value);
    }

    /**
     * Whether or not to allow white space
     *
     * @param boolean $flag
     * @return Quform_Filter_Digits
     */
    public function setAllowWhiteSpace($flag)
    {
        $this->_allowWhiteSpace = (bool) $flag;
        return $this;
    }

    /**
     * Is white space allowed?
     *
     * @return boolean
     */
    public function getAllowWhiteSpace()
    {
        return $this->_allowWhiteSpace;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以修改正则表达式模式以允许更多字符:

$pattern = '/[^0-9.$' . $whiteSpace .']/';

但这并不能保证正确的顺序,例如12$.17会通过。另一种方法是分别检查第一个字符,因为这是唯一可能是$符号的字符,您必须确定它是否为.

如果您决定单独检查第一个字符,则可以在其余字符上使用filter_var($value, FILTER_VALIDATE_FLOAT);之类的内容(如果不是美元符号,则包括第一个字符)。请参阅filter_var()上的手册。