【问题标题】:Removal of special characters, a comma separated text, PHP去除特殊字符,逗号分隔文本,PHP
【发布时间】:2011-09-08 09:40:21
【问题描述】:

我得到了用户指定的文本变量,通常,用户应该输入必须如下所示的标签:

"food, community, relationship"

但是如果用户输入例如

"food;;[]'.'.;@$#community,,,-;,,,relationship"

脚本应将其更改为:

"food, community, relationship".

我怎样才能完成这项工作?

【问题讨论】:

    标签: php text csv


    【解决方案1】:

    怎么样:

    $str = "-----music,,,,,,,,games;'235@#%@#%media";
    $arr = preg_split("/\W+/", $str, -1, PREG_SPLIT_NO_EMPTY);
    $str = implode(', ', $arr);
    echo $str,"\n";
    

    输出:

    music, games, 235, media
    

    您可以调整 \W 以适应您需要保留的字符。

    【讨论】:

    • 你好,如果输入是:-----music,,,,,,,,games;'235@#%@#%media,输出是:, music, games, 235, media,如何去掉开头的逗号?
    • @Lucas:使用标志PREG_SPLIT_NO_EMPTY。请参阅我编辑的答案。
    • 哦,非常感谢。我用谷歌搜索了函数array_filter,它也可以工作。目前哪个更好? //再次感谢。/
    • @Lucas: PREG_SPLIT_NO_EMPTY 标志给出了一个没有空字段的数组,array_filter 在给定的数组上工作。我的解决方案由 2 条指令组成,array_filter 有 3 条指令:preg_splitarray_filter 和 implode。我不知道哪个更好。
    【解决方案2】:

    你可以这样使用:

    $content = preg_replace("/[a-zA-Z,]/", "", $content);
    $content = str_replace(",,", ",", $content);
    $content = str_replace(",", " ,", $content);
    

    【讨论】:

      【解决方案3】:

      您可以替换所有不是字母数字的内容,如下所示:

      preg_split('/\W+/','',$input);
      

      会输出

      数组 ( [0] => 食物 [1] => 社区 [2] => 关系 [3] => 1123123123)

      编辑:固定正则表达式

      【讨论】:

      • 但我猜标签也可以是数字。
      • \W 将删除所有非字母或数字的内容。
      • 是的,这很好,但是如果用户不使用逗号分隔每个标签怎么办?铁。如果用户输入“food;;;..community”,输出应该是“food, community”(将修复非法字符)。
      • 啊,那么您想按每个非字母数字字符进行拆分。我已经编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多