strpos()不能与负偏移量一起使用

时间:2018-09-20 11:08:19

标签: php strpos

我有一个奇怪的人,可能有些愚蠢,但是我在这上面花了太长时间了。

我正在使用strpos()来查看字符串是否以某个子字符串结尾,方法是根据PHP文档,使用该子字符串的长度的负偏移量。据推测,它从干草堆的末端执行搜索x聊天对象。

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

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

  

字符串(29)“ fullname@company.tld_redacted”

     

遇到PHP错误

     

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

使用strrpos代替strpos

答案 2 :(得分:-2)

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

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

尝试一下,让我知道它是否对您有用