【问题标题】:What regex pattern is the correct to allow just double types?什么正则表达式模式只允许双重类型是正确的?
【发布时间】:2012-06-25 14:39:39
【问题描述】:

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

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

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

【问题讨论】:

  • 能否请您复习一下您给出的答案并接受对您帮助最大的答案,或者指出为什么它们都不能解决您的问题。谢谢。

标签: php regex zend-framework zend-form zend-validate


【解决方案1】:

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

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

如果你的目标本身并不总是在一条线上。

细分:

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

【讨论】:

  • 这可以缩短为 /^\d\d+(\.\d+)?^\d/ 但这可能有点难以理解。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    这是你需要的:

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

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

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

    .: 点需要转义 o.w。它将匹配任何字符

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

    【讨论】:

      【解决方案4】:

      你为什么不直接使用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 Website 建议将这个用于双打:

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

      Click here how for usage with PHP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多