【问题标题】:Regular expression to filter special characters not working过滤特殊字符的正则表达式不起作用
【发布时间】: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;
        }

更新:我也尝试了以下方法:

【问题讨论】:

  • 您的正则表达式需要一个字符串开头,列表中的单个字符,然后是结尾。试试这样的:^.*[~!@#$%^&amp;()_+={}[\]|\:;“’&lt;,&gt;.?๐฿].*$ 注意,你需要转义]
  • 当我尝试遇到异常时。但 IDe 也投诉了“Pattern.compile(”^.*[~!@#$%^&()_+={}[]|\\:;“'.?๐฿] .*$"); 未封闭的字符类"。这是在美元之后的最后。它让我运行程序,但出现以下异常:java.util.UnknownFormatConversionException: Conversion: ^
  • 注意我的编辑 - 转义 ]
  • 为什么你的正则表达式中有^$
  • 你能告诉我我应该怎么做吗?我的意思是我试图做“不”。真的我只需要。删除所有这些特殊字符的常规 espression。并且我使用 *$ 表示可以跟随零个或多个字符。

标签: regex regular-language


【解决方案1】:

如果给定的字符串不匹配,我想要一个返回 true 的函数。

您可以否定字符集。 (注意方括号内的^ 符号)。对于不包含任何这些特殊字符的字符串,这将返回 true。

^[^`~!@#$%^&*()_+={}\[\]|\\:;“’<,>.?๐฿]*$

https://regex101.com/r/CqtqoK/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2018-06-13
    • 2023-03-31
    相关资源
    最近更新 更多