在regex模式中需要帮助,它排除了android中的特殊字符

时间:2013-02-11 10:12:26

标签: regex

我想要一个正则表达式,限制用户接受android中的特殊字符。

我试过这个:

!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")

但无论电话号码是否包含特殊字符,它都会返回true

3 个答案:

答案 0 :(得分:1)

你的正则表达式[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]匹配任何列出的字符,因为它的否定。因此!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")评估为 a aa a! aa 和< strong> a!不是一个指定的字符。只有评估为false的案例才会出现任何这些字符

您必须只接受除此之外的其他字符。为此,您应该在字符类左括号(^)后面使用[,并在结束括号后添加+。此正则表达式匹配除列出的字符之外的任何一个或多个字符。

必需的正则表达式为"[^/,'*:<>!~@#$%^&()+=?()\"|!\\[#$-]+",它将模式与除此之外的一个或多个字符匹配。

注意:您的实现似乎是在java中。此正则表达式适用于 java

另一件事:为什么添加了\"而不是"?如果要在字符串中转义",则不能只提供\[,但我认为需要\\[

答案 1 :(得分:0)

由于您似乎与电话号码匹配(并且电话号码的定义非常有限),我建议使用正面而非负面测试:

phoneNumber.matches("[\\d\\s]+")

如果该字段仅包含数字和空格(通常我会在电话号码中允许其他字符,至少为()-+),则会返回true,但您已将其排除为特殊字符,因此我保持一致这一点)。

这样更简单,并且会从字段中排除所有无效字符。

您可能希望超越它并确保它是有效的电话号码格式。这取决于您想要匹配的电话号码类型。

答案 2 :(得分:0)

这是我的特殊字符验证器的正则表达式变体:

String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
Pattern pattern = Pattern.compile(regExp, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
return matcher.matches();

(Java代码)