使用正则表达式的特定字符串验证

Posted

技术标签:

【中文标题】使用正则表达式的特定字符串验证【英文标题】:Specific String validation using regex 【发布时间】:2017-10-08 07:18:24 【问题描述】:

有人告诉我使用正则表达式而不是 isUpperCase()isLowerCase() 等...但我不知道如何使用正则表达式。

这是我需要检查的:

length min = 8 characters
length max = 20 characters
must contain at least one lower case character (a-z)
must contain at least one upper case character (A-Z)
must contain at least one number (0-9)
must contain at least one special character

谢谢。

【问题讨论】:

这个问题没有显示任何研究工作。 他努力找到了 *** xD ***.com/questions/12018245/… 这是你的作业吗? 【参考方案1】:

这是一个来自 javascript 的示例。 Java 将类似:

var password = '0Aa!.......'
const regexp = /[0-9]?[a-z]?[A-Z]?[^0-9A-Za-z]?/;
var isValid = (password.length >= 8 && password.length <= 20) && regexp.test(password);

这测试至少有一个数字,然后是一个大写字母,然后是一个小写字母,最后一个不是数字或字母。它演示的是概念,而不是确切的解决方案。

我同意其他人的观点,即您应该深入阅读。正则表达式和 Java 都有很好的文档记录。

【讨论】:

这不匹配“AAAAAAA”吗?您的示例需要非常具体的顺序。如果没有前瞻,我认为这是不可能的 你是对的,骗子。我试图演示如何使用正则表达式,而不是确切的解决方案是什么。这个问题被否决了,但我想给作者一个做更多阅读的起点。这就是为什么我没有用 Java 做答案(他正在寻找)。【参考方案2】:

注意:我没有在 Java 中测试过,但这确实适用于 pcre 引擎。

^(?=.8,20$)(?=[^A-Z]*?[A-Z])(?=[^a-z]*?[a-z])(?=[^0-9]*?[0-9])(?=[^!@#$%^&*]*?[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]+$

分解:

    ^(?=.8,20$)               //this matches 8 to 20 characters, inclusive (positive lookahead)
    (?=[^A-Z]*?[A-Z])           //this matches if one uppercase letter is present (positive lookahead)
    (?=[^a-z]*?[a-z])           //this matches if one lowercase letter is present (positive lookahead)
    (?=[^0-9]*?[0-9])           //this matches if one digit is present (positive lookahead)
    (?=[^!@#$%^&*]*?[!@#$%^&*]) //this matches if one special character is present (positive lookahead)
    [a-zA-Z0-9!@#$%^&*]+$       //this matches if the enclosed characters are present

这对于你想要的可能有点过头了,但我已经在这里测试过了: https://regex101.com/r/P0J4X8/1

此外,在前瞻中可能不需要惰性求值器

【讨论】:

非常感谢。我将在 Java 中对此进行测试。请问一下,这个额外的检查(“不能包含一个或多个相同的连续字符”)会变成正则表达式吗? 我试过以下字符串:“.getInfo(0)$%@;”但它没有用。 我会研究负前瞻、捕获组和重复捕获组。【参考方案3】:

如果你想学习,如何使用正则表达式,我推荐以下

阅读你的讲义 阅读一本 Java 书籍(尤其是关于“模式”和“正则表达式”的章节) 阅读 Java 文档,例如关于Pattern

【讨论】:

【参考方案4】:

大写的正则表达式是[A-Z],小写的正则表达式是[a-z] 两个测试至少出现一次给定的字符组。

【讨论】:

以上是关于使用正则表达式的特定字符串验证的主要内容,如果未能解决你的问题,请参考以下文章

js电话号码验证的正则表达式?

用于密码验证的正则表达式,仅特定字符 [重复]

验证中文正则表达式怎么写?

2019手机号码JS正则表达式验证实例代码

js 常用正则表达式表单验证代码

正则表达式