【问题标题】:Yii2 rules for validating percentage like 65.45Yii2 验证百分比的规则,如 65.45
【发布时间】:2025-11-22 21:40:02
【问题描述】:

我知道这是一个非常简单且重复的问题,但我几乎尝试了所有但没有得到任何解决方案。 我想验证一定比例的学生喜欢。例如:65.45.. 用户必须输入这样的值,否则它应该显示错误。 我在模型中给出了以下规则。但它只取整数值。不验证百分比。

[['c_percentage'], 'number', 'numberPattern' => '/^\s*[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?\s*$/'],

请帮助解决这个问题。提前致谢。

【问题讨论】:

  • 关于它只采用整数值:模式是correct,它允许匹配整数和浮点值,你确定你正在检查/分配规则到/正确的元素?请注意,[0-9]* 匹配 0 个或多个数字,[.,]? 匹配 1 或 0 个逗号/句点。
  • 根据您的要求用户必须输入这样的值修改成这样:/^\s*[-+]?[0-9]+[.,][0-9]+([eE][-+]?[0-9]+)?\s*$/
  • 或者如果不允许使用科学记数法,请使用更简单的/^\s*\d+[.,]\d+\s*$/
  • 感谢您的回复.. 它仍然不工作。它的接受值如 55.6666。我想取值 55.66
  • 如果你也用'pattern'替换'numberPattern'怎么办?

标签: php regex yii2 preg-match rules


【解决方案1】:

这样就可以了:

/^\s*[+-]?\d+(?:[.,]\d{1,2})?\s*$/

说明:

/               : regex delimiter
  ^             : begining of string
    \s*         : 0 or more spaces
    [+-]?       : optional plus or minus
    \d+         : 1 or more digits
    (?:         : start non capture group
      [.,]      : dot or comma
      \d{1,2}   : 1 or 2 digits (decimal part)
    )?          : the group is optional to allow whole integer
    \s*         : 0 or more spaces
  $             : end of string
/               : regex delimiter

如果您只想匹配浮点值,请删除可选部分:

/^\s*[+-]?\d+[.,]\d{1,2}\s*$/

或者,如果您想要 2 位小数:

/^\s*[+-]?\d+[.,]\d{2}\s*$/

【讨论】:

  • 如果将非捕获更改为捕获组(即删除组开头的?:)是否有效?
  • 部分工作。如果我输入例如:55.,它现在不会显示错误消息
  • @SalmanRiyaz:你想接受整个整数(即45)还是只接受最大两位小数的浮点数?
  • 我想要 2 位小数的浮点数。喜欢 45.55
  • 我只需添加一个 ['c_percentage', 'compare', 'compareValue' => 100, 'operator' => '
【解决方案2】:

试试这个它会验证

[['c_percentage'], 'number', 'numberPattern' => '/^[0-9]{1,2}(\.([0-9]{0,2})){0,1}$/'],

【讨论】:

  • 感谢您的回复.. 它仍然不工作。它的接受值如 55.6666。我想取值 55.66
  • 55.6666 是有效百分比,你只需要 55.66 对吗?
  • 立即查看答案
  • 是的,我只想要 55.66 - 更新后的答案也没有用
最近更新 更多