我想要一个正则表达式来限制用户在 android 中接受特殊字符。
我试过这个:
!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")
但true
无论电话号码是否包含特殊字符,它总是返回。
我想要一个正则表达式来限制用户在 android 中接受特殊字符。
我试过这个:
!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")
但true
无论电话号码是否包含特殊字符,它总是返回。
您的正则表达式[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]
匹配任何出现一次的列出的字符,它的否定也是如此。因此!phoneNumber.matches("[/,'*:<>!~@#$%^&()+=?()\"|!\[#$-]")
,无论它是a还是aa还是a!作为aa和a!不是指定的字符之一。只有 case 评估为 false 才会出现这些字符中的任何一个。
您必须只接受这些以外的字符。为此,您应该^
在字符类左括号 ( [
) 之后使用一个,并在右括号之后添加一个+
。此正则表达式匹配除所列字符之外的任何一个或多个字符。
所需的正则表达式将"[^/,'*:<>!~@#$%^&()+=?()\"|!\\[#$-]+"
匹配具有除这些之外的一个或多个字符的模式。
注意:您的实现似乎是在 java 中。此正则表达式适用于java。
另一件事:你为什么要添加\"
而不是"
?如果要在字符串中转义,我认为"
你不能只给出\[
但需要。\\[
由于您似乎正在匹配电话号码(并且电话号码的定义非常有限),我建议使用正面而不是负面测试:
phoneNumber.matches("[\\d\\s]+")
如果该字段仅包含数字和空格,这将返回 true (通常我会允许电话号码中的其他字符,至少()-+
,但您已将这些字符排除为特殊字符,因此我保持一致)。
这要简单得多,并且会从字段中排除所有无效字符。
您可能希望超越这一点,并确保它也是有效的电话号码格式。这取决于您要匹配的电话号码类型。
这是我的特殊字符验证器的正则表达式变体:
String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
Pattern pattern = Pattern.compile(regExp, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
return matcher.matches();
(Java代码)