如何过滤除Java中的单词,数字和几个符号之外的所有内容?

时间:2012-03-20 13:05:02

标签: java regex

所以我们有一个几乎可以包含任何内容的数据库列。 Unicode,数字,单词等

但是,我们需要将这些数据发送到外部服务,并且他们对接受的内容非常严格。基本上,只有英文,单词,数字等。

我们无法更改此服务的要求,因此我们需要过滤用户发送给我们的内容。

我的RegEx技能很弱。这就是我们需要的:

字符[a-zA-Z] 数字[0-9] 以下符号:!@#$%^& *() - _ = +;:',。/?\

就是这样。当然,它可以是任何组合。我们只是想确保没有在那里列出任何滑动。

如何在Java中构建此过滤器的任何帮助将非常感激。

顺便说一句,我假设相同的RegEx模式适用于JavaScript?

修改

这是我的例子(使用Edmastermind29):

public static void main(String[] args) {

    String pattern = "^[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\]";
    String text = "Hello, I need everything in this string except the { or }";

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(text);

    // here, I need everything but the {}.
    // so I should have:  Hello, I need everything in this string except the  or 

}

好的,我想出了如何逃避这个字符串。但是,如何获得未滤除的所有内容?

3 个答案:

答案 0 :(得分:3)

您需要迭代每个匹配的子序列并连接字符串。 在给定的示例中,解决方案如下所示:

public static void main( String[] args ) {
  String pattern = "[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\ ]*";
  String text = "Hello, I need everything in this string except the { or }";

  Pattern p = Pattern.compile( pattern );
  Matcher m = p.matcher( text );
  StringBuilder sb = new StringBuilder();
  while( m.find() )
  {
     sb.append( m.group() );
  }
  String result = sb.toString();
  System.out.println( "Result: '" + result + "'" );
}

答案 1 :(得分:2)

[A-Za-z0-9!@#$%^&*()\-_=+;:',./?\\]*

接受任意数量的大写和小写字符,任意数量的数字,以及帖子中所述的以下符号!@#$%^&*()-_=+;:',./?\的任意数字。

答案 2 :(得分:1)

在Javascript中,您只需构造一个onSubmit函数,该函数将正则表达式/^[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\]$/与输入匹配,如果返回false,则不允许提交表单。

请注意,您必须转义“\”字符