首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配字符串中任何位置的非单词字符?

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

Stack Overflow用户
提问于 2020-07-30 07:30:06
回答 4查看 478关注 0票数 3

这是一个简单的问题,但是请听我说完-- Java作业的一部分有一个密码验证器方法。要求很简单-密码必须在6-10个字符之间,必须由数字或字母组成,并且必须至少有两个数字才能有效。我使用if语句并使用regex,由于某些原因,我无法使非单词字符regex匹配,尽管每个在线regex检查器都显示这应该有效,甚至jetbrains的regex检查插件也表明这是有效的。(我也知道,这可以用一条线,而不是if语句,但这种方式对我来说更简单。

示例输入- MyPass123应该是有效的,MyPass123#应该匹配非单词字符,并且应该返回“密码必须仅由字母和数字组成”,而这种情况永远不会发生。我是Java的初学者,所以很可能我做得不对,尽管这是一个简单的问题。提前谢谢你!

方法代码如下:

代码语言:javascript
复制
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");
        }
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-30 07:56:54

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

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

票数 1
EN

Stack Overflow用户

发布于 2020-07-30 07:51:19

我已经测试了下面的代码。可以使用两个选项,尝试使用Konrad在上面的注释中提到的find方法,或者在regex中处理它,以匹配字符串中任何位置的字符。

\\w{6,10} -只匹配包含单词字符的有效密码(A-Za-Z0-9)

.*?\\d{2,}.*? -查找两个或更多个连续数字

我已将其更改为使用Pattern.matches。

代码语言:javascript
复制
import java.util.regex.*;
public class test {
    public static void passswordCheck(String password)
    {
        if(password.length()<6 || password.length()>10)
        {
            System.out.println("Password needs to be between 6 and 10 characters");
        }
        else if(!Pattern.matches("\\w{6,10}",password)) //This should match when input is MyPass123#
        {
            System.out.println("Password must consist only of letters and digits");
        }
        else if(!Pattern.matches(".*?\\d{2,}.*?",password))
        {
            System.out.println("Password needs to have at least 2 digits");
        }
        else
        {
            System.out.println("Password is valid");
        }
    }
    public static void main(String[] args) 
    {
        passswordCheck("Mypass2");
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-07-30 08:02:51

String#matches总是执行整个匹配,即匹配需要跨越整个字符串,从第一个字符到最后一个字符。要搜索字符串中任何位置的匹配,需要使用Matcher对象的Matcher

代码语言:javascript
复制
final Pattern nonWordChar = Pattern.compile("\\W");
if (nonWordChar.matcher(password).find()) {
    System.out.printf("Password must consist only of letters and digits");
}
…

您将需要对其他正则表达式执行同样的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63168229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档