所以我们有一个几乎可以包含任何内容的数据库列。 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
}
好的,我想出了如何逃避这个字符串。但是,如何获得未滤除的所有内容?
答案 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,则不允许提交表单。
请注意,您必须转义“\”字符