我有以下带有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