Php 什么正则表达式模式才是允许双类型的正确模式?
我使用zend framework编写了以下代码:Php 什么正则表达式模式才是允许双类型的正确模式?,php,regex,zend-framework,zend-form,zend-validate,Php,Regex,Zend Framework,Zend Form,Zend Validate,我使用zend framework编写了以下代码: $descuentoElement->addValidator(new Zend_Validate_Regex(array('pattern' => '/[0-9]+(.[0-9]+)?/'))); 我想验证双类型输入,如1.2或4…不是“4sd”,而是此模式不起作用…它允许写入“4s”…是否有任何答案或正确的正则表达式模式…我想要一个建议…谢谢…您必须锚定您的正则表达式并避开此点: ^[0-9]+(\.[0-9]+)?$ 锚(
$descuentoElement->addValidator(new Zend_Validate_Regex(array('pattern' => '/[0-9]+(.[0-9]+)?/')));
我想验证双类型输入,如1.2或4…不是“4sd”,而是此模式不起作用…它允许写入“4s”…是否有任何答案或正确的正则表达式模式…我想要一个建议…谢谢…您必须锚定您的正则表达式并避开此点:
^[0-9]+(\.[0-9]+)?$
锚(^
和$
)是必需的,因此它匹配完整的字符串,而不仅仅是任意的子字符串。点是正则表达式中的一个特殊字符,通常与所有其他字符匹配。这就是您需要的:
^\d+(\.\d+)?$
^
:仅从字符串开头开始匹配
$
:仅当regexp与字符串结尾匹配时才匹配
:圆点需要从零开始转义。它将匹配任何字符
\d
:匹配任何数字[0-9]@Joey的答案在匹配整行的情况下有效,但您需要使用
/[^0-9][0-9]+(\.[0-9]+)?[^0-9]/
如果你的目标不总是在一条线上
细分:
/
正则表达式分隔符[^0-9]
非数字[0-9]+
一个或多个数字(
开始可选匹配\.
点字符,用\
[0-9]+
一个或多个数字)?
结束可选匹配;通过?
使其成为可选的
[^0-9]
非数字/
正则表达式分隔符为什么不直接使用
Zend_Validate_Float允许您验证给定值是否包含浮点值。此验证器还验证本地化输入
参考指南中的示例:
$validator = new Zend_Validate_Float();
$validator->isValid(1234.5); // returns true
$validator->isValid('10a01'); // returns false
$validator->isValid('1,234.5'); // returns true
如果您仍然想要一个正则表达式,则建议将此正则表达式用于double:
{
^ (?&osg)\ * ( (?&int)(?&dec)? | (?&dec) ) (?: [eE](?&osg)(?&int) )? $
(?(DEFINE)
(?<osg>[-+]?) # optional sign
(?<int>\d++) # integer
(?<dec>\.(?&int)) # decimal fraction
)
}x
{
^(?&osg)\*(?&int)(?&dec)|(?&dec))(?:[eE](?&osg)(?&int))$
(?(定义)
(?[-+]?)#可选符号
(?\d++)#整数
(?\.(?&int))#小数
)
}x
这可以缩短为/^\d\d+(\.\d+)^\d/,但这可能有点不可读。请您回顾一下给出的答案,并接受对您最有帮助的答案,或者指出为什么这些答案都不能解决您的问题。谢谢