3

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

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

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

4

4 回答 4

2

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

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

如果您的目标本身并不总是在线。

分解:

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

于 2012-06-25T14:51:55.770 回答
1

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

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

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

于 2012-06-25T14:40:39.297 回答
1

这就是你需要的:

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

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

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

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

\d: 匹配任何数字 [0-9]

于 2012-06-25T14:43:22.147 回答
0

你为什么不直接使用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

于 2012-06-26T07:41:55.783 回答