【问题标题】:strpos() not working with negative offsetstrpos() 不适用于负偏移
【发布时间】:2018-09-20 11:08:18
【问题描述】:

我有一个奇怪的,可能有点傻,但我已经绞尽脑汁太久了。

我正在使用 strpos() 来查看字符串是否以某个子字符串结尾,方法是根据 PHP 文档使用所述子字符串长度的负偏移量。据推测,它从大海捞针执行搜索 x 个字符。

var_dump($recipient); //debug
if(strpos( $recipient, '_redacted', -9 ) === FALSE) {
   // do stuff
}

它只是抱怨偏移量不包含在字符串中。然而输出是:

string(29) "fullname@company.tld_redacted"

遇到了 PHP 错误

严重性:警告 消息:strpos():偏移量不包含在字符串中

可以清楚地看到字符串比 9 个字符长得多,那么为什么会抛出该警告?(并且通过扩展返回 FALSE 并始终触发我的条件 - 不正确)

【问题讨论】:

    标签: php strpos


    【解决方案1】:

    在 PHP 7.1 中添加了对负偏移的支持。
    您可能运行的是旧版本。
    始终查看the manual page 上的变更日志部分。

    【讨论】:

    • 好地方。该测试平台在 7.02 上。知道这会很愚蠢。
    【解决方案2】:

    使用strrpos 而不是strpos

    【讨论】:

      【解决方案3】:

      您可以尝试更改 if 语句的逻辑

      var_dump($recipient); //debug
      if(strpos( $recipient, '_redacted') === strlen($recipient) - 9) {
         // do stuff
      }
      

      尝试一下,让我知道它是否适合你

      【讨论】:

      • 我认为substr($recipient, -9) == '_redacted' 会不那么麻烦……
      • 我想知道为什么我的回答被否决了?这是一个有效的选项,但不那么优雅。
      猜你喜欢
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多