【问题标题】:Regex: Ensure minimum number of line breaks in a textarea input正则表达式:确保文本区域输入中的换行符最少
【发布时间】:2012-01-06 08:45:10
【问题描述】:

我目前有一个文本区域作为输入字段,并希望确保它有超过 3 个单独的行。

当我使用 Yii 框架时,我使用 validate() 方法来验证模型。

由于 Yii 完成了验证,我打算使用匹配功能来使用正则表达式检查输入是否有效。

目前我有:

    array('ingredients', 'match', 'pattern'=> '/(\n|\r\n|\r){3,}/'),

这不起作用,但是如果我将 3 更改为 1 它可以正常工作。

如何确保至少有 3 行使用正则表达式?

【问题讨论】:

  • substr_count($string, "\n") >= 3 对我来说似乎更有意义。我确信 Yii 允许像这样的自定义验证功能。
  • 三行是两个换行符(不是三个)。
  • @deceze 我打算检查一下,但是 Yii 框架一整天都无法访问。
  • @hakre 好点,虽然有 4 行仍然失败。

标签: php regex yii preg-match line-breaks


【解决方案1】:

三行是两个中断,而不是三个。所以你要找的数字是 2。

然后正则表达式首先匹配第一个。因此,您应该使用\r\n 作为第一个子模式,以防止将\n\r 捕获为两个换行符的序列。

然后你寻找重复的换行符。但您希望允许的不仅仅是空行。

这种模式可能会满足您的需求:

/^(?:.*(?:\r\n|\n|\r)){2,}/

它将允许三个或更多(空和非空)行。

【讨论】:

    【解决方案2】:

    你的正则表达式

    /(\n|\r\n|\r){3,}/
    

    意味着有三个连续的换行符。允许介于两者之间的其他字符,例如

    /((\n|\r\n|\r).*){3,}/
    

    【讨论】:

      【解决方案3】:

      您还需要匹配这些行的内容:

      array('ingredients', 'match', 'pattern'=> '/(.*(\n|\r\n|\r)){3,}/'),
      

      【讨论】:

        猜你喜欢
        • 2011-11-20
        • 2017-01-05
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多