-2

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

我试过这个:

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

true无论电话号码是否包含特殊字符,它总是返回。

4

3 回答 3

1

您的正则表达式[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]匹配任何出现一次的列出的字符,它的否定也是如此。因此!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]"),无论它是a还是aa还是a!作为aaa!不是指定的字符之一。只有 case 评估为 false 才会出现这些字符中的任何一个

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

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

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

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

于 2013-02-11T10:23:08.377 回答
0

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

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

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

这要简单得多,并且会从字段中排除所有无效字符。

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

于 2013-02-11T12:24:31.130 回答
0

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

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

(Java代码)

于 2017-03-20T14:56:11.147 回答