我想要一个正则表达式,限制用户接受android中的特殊字符。
我试过这个:
!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")
但无论电话号码是否包含特殊字符,它都会返回true
。
答案 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代码)