首页 文章

如何删除非字母数字字符?

提问于
浏览
290

我需要从字符串中删除不在 a-z A-Z 0-9 集中的所有字符或不是空格 .

有人有这个功能吗?

9 回答

  • 141

    听起来你几乎已经知道你想要做什么,你基本上把它定义为正则表达式 .

    preg_replace("/[^A-Za-z0-9 ]/", '', $string);
    
  • 15

    对于unicode字符,它是:

    preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
    
  • -8

    Regular expression是你的答案 .

    $str = preg_replace('/[^a-z\d ]/i', '', $str);
    
    • i 代表不区分大小写 .

    • ^ 表示,不是以...开头 .

    • \d 匹配任何数字 .

    • a-z 匹配 az 之间的所有字符 . 由于 i 参数,您不必指定 a-zA-Z .

    • \d 之后有一个空格,因此这个正则表达式允许空格 .

  • 0

    这是一个非常简单的正则表达式:

    \W|_
    

    并根据需要使用它(使用前向 / 斜杠分隔符) .

    preg_replace("/\W|_/", '', $string);
    

    在这里用这个很好的工具测试它,解释正则表达式正在做什么:

    http://www.regexr.com/

  • 1
    [\W_]+
    
    $string = preg_replace("/[\W_]+/u", '', $string);
    

    它选择所有不是A-Z,a-z,0-9并删除它 .

    请参见此处的示例:https://regexr.com/3h1rj

  • 2
    preg_replace("/\W+/", '', $string)
    

    你可以在这里测试一下:http://regexr.com/

  • 4

    如果您需要支持其他语言,而不是典型的A-Z,您可以使用以下语言:

    preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
    
    • [^\p{L}\p{N} ] 定义了一个否定的(它将匹配一个 not 定义的字符)字符类:

    • \p{L} :来自任何语言的信件 .

    • \p{N} :任何脚本中的数字字符 .

    • `` :一个空格字符 .

    • + 贪婪地匹配1和无限次之间的字符类 .

    这将保留其他语言和脚本以及A-Z中的字母和数字:

    preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
    preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
    preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
    

    注意:这是一个非常古老但仍然相关的问题 . 我的回答纯粹是为了提供可能对未来访客有用的补充信息 .

  • 43

    我也在寻找答案,我的目的是清理每一个非alpha,并且不应该有多个空格 .
    所以,我修改了Alex对此的回答,这对我有用 preg_replace('/[^a-z|\s+]+/i', ' ', $name)
    以上正则表达式将 sy8ed sirajul7_islam 变为 sy ed sirajul islam
    说明:正则表达式将在 insensitive 方式中从a到z检查 NOT ANY 或多个空格,并且它将被转换为单个空格 .

  • 606

    我用这个:

    //to remove non english character
    $str = preg_replace('/[^\00-\255]+/u', '', $str);
    

相关问题