【发布时间】:2017-11-10 14:45:58
【问题描述】:
我正在搜索一个正则表达式,我可以使用它来检查用户输入是否包含指定列表中的特殊字符。
以下是我尝试编写的正则表达式不允许使用的特殊字符:^[`~!@#$%^&*()_+={}\[\]|\\:;“’<,>.?๐฿]*$
我去了https://regex101.com/,我期待以下输入匹配,但不是为什么:
127 elmer road ??<>()
所以在 android java (但可以是 any )中,我编写了以下函数,但它也总是返回 true 。我如何过滤所有这些特殊字符。如果给定的字符串不匹配,我想要一个返回 true 的函数。
public boolean isValid( EditText et) {
String string = et.getText().toString();
boolean isValid = true;
final Pattern sPattern
= Pattern.compile("^[`~!@#$%^&*()_+={}\\[\\]|\\\\:;“’<,>.?๐฿]*$");
isValid= !sPattern.matcher(string).matches();
return isValid;
}
更新:我也尝试了以下方法:
【问题讨论】:
-
您的正则表达式需要一个字符串开头,列表中的单个字符,然后是结尾。试试这样的:
^.*[~!@#$%^&()_+={}[\]|\:;“’<,>.?๐฿].*$注意,你需要转义]。 -
当我尝试遇到异常时。但 IDe 也投诉了“Pattern.compile(”^.*[~!@#$%^&()_+={}[]|\\:;“'.?๐฿] .*$"); 未封闭的字符类"。这是在美元之后的最后。它让我运行程序,但出现以下异常:java.util.UnknownFormatConversionException: Conversion: ^
-
注意我的编辑 - 转义
] -
为什么你的正则表达式中有
^和$? -
你能告诉我我应该怎么做吗?我的意思是我试图做“不”。真的我只需要。删除所有这些特殊字符的常规 espression。并且我使用 *$ 表示可以跟随零个或多个字符。