当第二个参数包含操作符时,为什么ltrim会删除一个字符?

sic*_*a07 11 php string trim

如果我做:

ltrim('53-34567', '53-');
ltrim('53+34567', '53+');
ltrim('53*34567', '53*');
Run Code Online (Sandbox Code Playgroud)

我得到4567结果而不是34567.这种行为的解释是什么?

Cid*_*Cid 22

ltrim('53-34567', '53-');
Run Code Online (Sandbox Code Playgroud)

有一个5在开头,'53-34567'所以它被删除.

有一个3在开头,'3-34567'所以它被删除.

有一个-在开头,'-34567'所以它被删除.

有一个3在开头,'34567'所以它被删除.

'53-'在开始时没有任何东西,'4567'所以它停止了.

这与trim()删除不需要的尾随字符的行为相同.例如,trim(" lots of spaces ");将"lots of spaces"通过删除尾随和前导空格返回,但将保留内部空格.

  • 这是对正在发生的事情的非常清楚和良好的解释.抛出`character_mask`定义比使用它更有用.如果我可以提出建议,请在"53-34567"的左侧添加"继续删除`5`或`3`或`-`." 在你的答案的某个地方. (3认同)

Ger*_*obs 17

第二个论点ltrim()如下

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

它用于指定要修剪的字符,包括哪些字符3.如果您知道要提取的内容,则可以使用其他字符串函数.

至于为什么另一个5不被删除,请参阅此评论:http://php.net/manual/en/function.ltrim.php#118221


小智 5

这是因为ltrim修剪了第二个参数中的字符.

这个怎么运作:

  1. 从左开始读取一个字符串(第一个参数).
  2. 检查第一个左侧的char是否在"character-to-trim"列表中.
  3. 如果2为是 - 修剪它并转到步骤1.
  4. 如果2是否 - 退出.