【问题标题】:return words spaces numbers or match everything expect special chars like *&$!^&?返回单词空格数字或匹配除特殊字符(如 *&$!^&?
【发布时间】:2010-07-29 18:18:08
【问题描述】:

好的,我有一些字符串

'Hello^<php>World&*124><
i ju*st press enteR'

我如何将它返回(一个函数更好?)

'Hello World123
i just press enter'

允许

  • 数字
  • 文字
  • 空格、换行符等

我如何使用正则表达式来做到这一点?我必须使用正则表达式吗?还有其他方法吗?

谢谢

亚当斋月

【问题讨论】:

  • 您将无法找到一个简单的正则表达式来删除“你好”中的空格,但不会删除任何其他空格...
  • H ello 将是一个大问题。
  • ups 哈哈哈抱歉我忘了那部分。 :|
  • EnteRenter 是另一个问题。
  • :|难怪人们投票赞成。

标签: php regex filter


【解决方案1】:

你可以这样做:

function removeBad($str)
{
  return preg_replace("/[^a-zA-Z0-9_ (\n|\r\n)]+/", "", $str);
}

这将删除字母、数字、空格和换行符以外的任何内容

如果您还想删除文本中的任何标签,例如 &lt;php&gt;,您可以这样做:

function removeBad($str)
{
  $str = strip_tags($str);
  return preg_replace("/[^a-zA-Z0-9_ (\n|\r\n)]+/", "", $str);
}

用法:

$str = removeBad('Hello^<php>World&*124><');
echo $str;

结果:

HelloWorld124

.

$str = removeBad('i ju*st press EnteR');
echo $str;

结果:

i just press EnteR

【讨论】:

  • 很好,限制一切(包括特殊字符)怎么样? /.{$min,$max}/ 或者有更好的方法吗?
  • @Adam Ramadhan:你能解释一下你的确切意思吗?
  • 像 'wadwd' 这样的限制,这是我的新手尝试希望它帮助function setMax( $input , $min , $max ) { $text = "/^.{'.$min.','.$max.'}$/"; if ( preg_match( $text, $input ) ) { return true; } else { return false; } }
  • 请注意,只有-\ ] 在字符类中具有特殊含义。这意味着[^a-zA-Z0-9_ (\n|\r\n)] 也将允许(|)
  • @Adam Ramadhan: (this|that) 是匹配thisthat 的替代。另一方面,[this|that] 是一个字符类,它处理[…] 中描述的字符中的一个字符,在这种情况下,this|a.
【解决方案2】:

正则表达式替换可以为您做到这一点。我认为你需要两个。第一个删除 字符之间的所有内容。第二个删除任何不在您允许的字符集中的字符。这是最安全的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多