我有下面的REGEX,我希望排除某些字符。这些字符被正确排除:£“〜#¬| {}但这些不是:@ [] /?;:
因此,例如,test£test被正确识别为无效,但test @ test被错误地识别为有效。
在https://regex101.com/上对此进行测试将问题标识为方括号并指示我需要转义第一个([括号]和 - [连字符],如下所示 - ^ [a-zA-z0-9!$ %{& * \()\ -_ = +] +?$。在https://regex101.com上,表达式的行为与预期的一样,但如果我尝试在Java中使用这样的转义字符,则编译器会出错。
任何想法如何让这个正则表达式按我的意愿行事?对不起,如果这很明显。
final String REGEX = "^[a-zA-z0-9!$%^&*()-_=+]+?$";
System.out.println ("Please enter a password");
String password = input.next();
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(password);
if (!m.matches()){
System.out.println("Illegal characters");
答案 0 :(得分:2)
^[a-zA-z0-9!$%^&*()-_=+]+?$
^^^ ^^^
第一个带下划线的范围是A-z
。匹配:
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
第二个带下划线的范围对应于
)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
See regex in use here:请注意,正则表达式只是下面第一个示例的集合。这是为了显示它实际匹配的字符。
使用以下任意一种
^[a-zA-Z0-9!$%^&*()\-_=+]+?$
^[a-zA-Z0-9!$%^&*()_=+-]+?$
^[\w!$%^&*()=+-]+?$
^[\w!$%&^(-+=-]+?$
答案 1 :(得分:-1)
正则表达式的问题在于它包含需要转义的特殊字符。
如果您的密码中有效,则此页面中引用的所有字符都需要转义。
因此,您应该使用类似以下内容的正则表达式。但是,我还没有对此进行过彻底的测试,所以请写一些彻底的单元测试来涵盖所有合理的可能性。
"^[a-zA-z0-9!\\$%\\^&\\*\\(\\)\\-_\\=\\+]+?$"
答案 2 :(得分:-1)
抱歉 - 我现在意识到我有许多元字符都需要转义。以下REGEX按预期运行,使用双反斜杠来转义每个元字符:
final String REGEX = "^[a-zA-z0-9\\!\\$%\\^&*\\(\\)\\-_\\=\\+]+?$";
如果有一种更优雅的方式,我很乐意听到它!