java - 如何匹配字符串中任意位置的非单词字符?

标签 java regex

这是一个简单的问题,但请听我说完 - Java 家庭作业的一部分有一个密码 validator 方法。要求很简单 - 密码必须介于 6-10 个字符之间,必须仅由数字或字母组成,并且必须至少包含 2 位数字才有效。我用 if 语句和正则表达式做了这个,出于某种原因我无法让非单词字符正则表达式匹配,尽管每个在线正则表达式检查器都显示这应该有效,甚至用于正则表达式检查的 jetbrains 插件显示这应该是有效的。 (我也明白这可以用一行代码而不是任何 if 语句来完成,但这种方式对我来说更简单。

示例输入 - MyPass123 应该是有效的,MyPass123# 应该匹配非单词字符并且应该返回“密码必须只包含字母和数字”而不是这种情况永远不会发生。我是 Java 的初学者,所以即使这是一个如此简单的问题,我很可能没有做正确的事情。提前致谢!

方法代码如下:

public static void passswordCheck(String password)
    {
        if(password.length()<6 || password.length()>10)
        {
            System.out.printf("Password needs to be between 6 and 10 characters");
        }
        else if(password.matches("\\W")) \\This should match when input is MyPass123#
        {
            System.out.printf("Password must consist only of letters and digits");
        }
        else if(!password.matches("/(\\d).*(\\d)/"))
        {
            System.out.printf("Password needs to have at least 2 digits");
        }
        else
        {
            System.out.printf("Password is valid");
        }
    }

最佳答案

仅当字符串由非字母数字的单个字符组成时才匹配(= [^a-zA-Z0-9_])。

如果您想要任何包含至少一个非字母数字字符的字符串:.*?\W.*

关于java - 如何匹配字符串中任意位置的非单词字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63168229/

相关文章:

java - if 条件被忽略

java - 如何打开键盘并更改输入语言

java - 事件观察者的替代方案

java - 如何提取自定义格式的JSON数据?

regex - 删除文件中的所有空格 - Linux

ruby - 在某些行的字母之间插入符号

java - 在java中查找wma的长度

javascript - 正则表达式 : Parse a sentence

javascript - 在正则表达式中允许点 (.)

正则表达式