我有以下带有zend框架的代码:
$descuentoElement->addValidator(new Zend_Validate_Regex(array('pattern' => '/[0-9]+(.[0-9]+)?/')));
我想验证双类型输入,例如 1.2 或 4...不是“4sd”,而是这种模式不能正常工作...它允许写入“4s”...是否有任何答案或正确的正则表达式模式...我想要一个建议...谢谢...
我有以下带有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