【问题标题】:Why does ltrim remove one character when the second argument contains an operator sign? [duplicate]当第二个参数包含运算符符号时,为什么 ltrim 会删除一个字符? [复制]
【发布时间】:2018-10-14 21:32:11
【问题描述】:

如果我这样做:

ltrim('53-34567', '53-');
ltrim('53+34567', '53+');
ltrim('53*34567', '53*');

我得到4567,而不是34567。这种行为的解释是什么?

【问题讨论】:

标签: php string trim


【解决方案1】:
ltrim('53-34567', '53-');

'53-34567' 的开头有一个5,所以它被删除了。

'3-34567' 的开头有一个3,因此将其删除。

'-34567' 的开头有一个-,因此将其删除。

'34567' 的开头有一个3,因此将其删除。

'4567' 开头的'53-' 没有任何内容,所以它停止了。

这与trim() 的行为相同,只是删除了不需要的尾随 字符。例如,trim(" lots of spaces "); 将通过删除 trailingleading 空格返回 "lots of spaces",但会保留内部空格。

【讨论】:

  • 非常清楚!谢谢!
  • 这是对正在发生的事情的一个非常清晰和很好的解释。比抛出 character_mask 定义有用得多。如果我可以提出建议,请添加“继续从53-34567 的左侧删除53-”。在你的答案中的某个地方。
【解决方案2】:

这是因为 ltrim 从第二个参数中修剪字符。

它是如何工作的:

  1. 从左边开始读取一个字符串(第一个参数)。
  2. 检查 first-left char 是否在“要修剪的字符”列表中。
  3. 如果 2 为“是” - 修剪并转到第 1 步。
  4. 如果 2 为否 - 退出。

【讨论】:

    【解决方案3】:

    ltrim()的第二个参数如下

    character_mask
    您还可以通过 character_mask 参数指定要去除的字符。只需列出您要删除的所有字符。

    用于指定要修剪的字符,您的包括3。如果您知道要提取什么,则可以使用其他字符串函数。

    至于为什么其他5没有被删除,请看这条评论:http://php.net/manual/en/function.ltrim.php#118221

    【讨论】:

    • 我想我不明白 :) 在这种情况下,为什么 5 也不会被修剪?最终结果包含5。另外,如果我使用53 作为第二个参数(没有任何运算符符号),我会得到+34567 结果。
    • @sica07 : 试试ltrim('52*34567', '52*'); 你会得到答案
    • 更准确地说,trim() 排除了第二个参数中列出的字符(与它们出现的频率无关)而不是参数字符串。在 OT 的示例中,三行可以简化为 ltrim($str, '+3-5*')(或字符的任何其他排列)并且工作方式相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2011-10-24
    • 1970-01-01
    • 2015-12-27
    • 2016-02-03
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多