我有一个用于验证表单的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;
}
}
答案 0 :(得分:1)
您可以修改正则表达式模式以允许更多字符:
$pattern = '/[^0-9.$' . $whiteSpace .']/';
但这并不能保证正确的顺序,例如12$.17
会通过。另一种方法是分别检查第一个字符,因为这是唯一可能是$
符号的字符,您必须确定它是否为.
如果您决定单独检查第一个字符,则可以在其余字符上使用filter_var($value, FILTER_VALIDATE_FLOAT);
之类的内容(如果不是美元符号,则包括第一个字符)。请参阅filter_var()
上的手册。