使用正则表达式的特定字符串验证
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]
两个测试至少出现一次给定的字符组。
【讨论】:
以上是关于使用正则表达式的特定字符串验证的主要内容,如果未能解决你的问题,请参考以下文章