什么正则表达式模式是正确的,只允许双精度类型


What regex pattern is the correct to allow just double types?

我有以下带有zend框架的代码:

$descuentoElement->addValidator(new Zend_Validate_Regex(array('pattern' => '/[0-9]+(.[0-9]+)?/')));

我想验证双类型输入,如 1.2 或 4...不是"4sd",而是这种模式不能正常工作......它允许写"4s"...是否有任何答案或正确的正则表达式模式...我想要一个建议...谢谢。。。

如果你匹配整行,@Joey 的答案将起作用,但你需要使用类似

/[^0-9][0-9]+('.[0-9]+)?[^0-9]/

如果您的目标并不总是自己在一条线上。

故障:

/正则表达式分隔符
     [^0-9] 非数字
     [0-9]+一个或多个数字
     (开始可选匹配
         '.点字符,转义为 '
         [0-9]+一个或多个数字
     )?结束可选匹配;可选配 ?
     [^0-9] 非数字 /正则表达式分隔符

你必须锚定你的正则表达式并转义点:

^[0-9]+('.[0-9]+)?$

锚点(^$)是必需的,因此它匹配完整的字符串,而不仅仅是一个任意的子字符串。点是正则表达式中的特殊字符,通常与所有其他字符匹配。

这是你需要的:

^'d+('.'d+)?$

^:仅从字符串的开头开始匹配

$ :仅当您的正则表达式与字符串的末尾匹配时才匹配。

.:点需要转义,它将匹配任何字符

'd : 匹配任意数字 [0-9]

你为什么不直接使用Zend_Validate_Float

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

如果你仍然想要一个正则表达式,perl.org 网站建议这个双打:

{
    ^ (?&osg)' * ( (?&int)(?&dec)? | (?&dec) ) (?: [eE](?&osg)(?&int) )? $
    (?(DEFINE)
        (?<osg>[-+]?) # optional sign
        (?<int>'d++) # integer
        (?<dec>'.(?&int)) # decimal fraction
    )
}x

单击此处了解如何使用 PHP