【问题标题】:Combine preg _replace and strtolower结合 preg _replace 和 strtolower
【发布时间】:2016-01-22 02:09:37
【问题描述】:

我尝试组合strtolowerpreg_replace,但我不知道如何嵌套它。我试过这样:

$res = strtolower(preg_replace("/[^a-zA-Z]/", "", $string));

我找到了this solution,但无法让它工作。我想要一个没有特殊字符的小写字符串:

我是一些特殊内容

变成

iamsomespecialcontent

我怎样才能做到这一点并将其存储在$res中?

【问题讨论】:

  • 为什么这不起作用?
  • 无论哪个函数嵌套最深,都会先出现。在这种情况下,就像您现在的代码一样,preg_replace 首先发生,然后preg_replace 的输出被转换为更低,并输出到$res
  • 我不知道为什么上面的代码不起作用,但我用两行解决了它:$string = strtolower(get_sub_field('a-pikto')); $res = preg_replace("/[^a-zA-Z]/", "", $string);...

标签: php


【解决方案1】:

好吧,我可以说第一步是将字符串设为小写

$rest = strtolower($string);

然后删除空格

$rest = preg_replace("/\s+/", "", $rest);

你可以把它组合成-

$rest = preg_replace("/\s+/", "", strtolower($rest));

对于更多特殊字符相关的解决方案,您可以尝试this

【讨论】:

【解决方案2】:

最好将它分成两行并使用 var_dump() 调试命令的输出,以查看发生了什么:

<?php

/* string with special chars */
$string = 'abczABCZ-#+´!"§123';

$no_special_chars = preg_replace("/[^a-zA-Z]/", "", $string); 

var_dump($no_special_chars);    // string 'abczABCZ' (length=8)   

$lowercased = strtolower($no_special_chars);

var_dump($lowercased);          // string 'abczabcz' (length=8)

也许您注意到,如果您先将字符串小写,则不必在 preg_replace() 中处理 A-Z

$res = preg_replace("/[^a-z]/", "", strtolower($string));

var_dump($res); // string 'abczabcz' (length=8)

【讨论】:

  • 您也可以将i 修饰符传递给preg_replace 代码:preg_replace('/[^a-z]/i', '', $string);
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2010-10-26
  • 1970-01-01
  • 2012-01-06
  • 2012-04-16
  • 1970-01-01
相关资源
最近更新 更多