【问题标题】:I need help building a regular expression that will only leave behind letters and whitespace我需要帮助构建一个只会留下字母和空格的正则表达式
【发布时间】:2014-04-05 19:24:23
【问题描述】:

我正在用 PHP 构建一个表单,它要求字段值仅包含字母和空格。

不过,这个问题有一些小转折:

  • 我不能连续有多个空格
  • 字符串中不能有前导或尾随空格(与TRIM() 函数的效果相同)
  • 不符合的特殊字符和/或空格需要替换为单个空格

输入输出示例:

输入
ConQueso, Cheese
输出
ConQueso Cheese

输入
0 Eddie Murphy-Washington, the 3rd .
输出
Eddie Murphy Washington the rd

【问题讨论】:

    标签: php regex replace special-characters string-formatting


    【解决方案1】:

    只需将[^a-z]+ 替换为空格即可。最后,做一个trim()

    $text = trim(preg_replace('/[^a-z]+/i', ' ', $text));
    

    【讨论】:

    • (已更正)唯一不会做的是将字符串中多个空格的实例替换为:Murphy-Washington, the 3rdMurphy Washington the 3rd
    • @alliteralmind 确实如此。可能你没有运行代码。刚猜对吧? [^a-z] 除了字母以外的任何东西:-)
    • 哈!!空格是[^a-z] 不是吗? :) 好吧,现在我只是必须投票。
    • 谢谢.... 做到了。我使用“ h 85 k,en p..ari-s ”(不带引号)并返回“h k en p ari s”(再次,不带引号)。我希望我对正则表达式有一个直观的理解或至少更好地掌握。再次感谢
    • @alliteralmind 当然。 [^a-z] = 除了az 之外的所有内容。所以空间落入其中。
    【解决方案2】:

    因为您似乎想构建一个用于输入个人数据的表单,所以您应该使用[^\pL] 而不是[^A-Za-z],因为名称中可以有非 ASCII 字母(如 ä 或 É)。 (除了修剪功能,到目前为止已经描述过。)

    【讨论】:

      【解决方案3】:

      试试这个 -

      $text = "Some text here.";
      $str = trim(preg_replace('/[^a-zA-Z\']/', ' ', $text));
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-30
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多