任何人都可以帮我创建一个正则表达式,用于以下条件的密码验证:
开头和结尾不允许使用数字/数字,但必须位于字符串的中间
最少6,最多10个字符
不允许使用特殊字符
强制要求至少一个数字和两个字符。
正确的格式 - ab21cd,stack12flow 格式不正确 - stack123,123stack
答案 0 :(得分:1)
这是模式
\A[^0-9].*[^0-9]\z
\A
表示字符串的开头。 [^0-9]
表示除数字之外的任何内容。 .*
表示任意长度的字符。可以是文字,数字或符号。 \z
表示字符串结尾。[^0-9]
表示不应以数字结尾
如果您想要最少6个字符和最多10个字符,请执行此操作
^[^0-9].{4,8}[^0-9]\z
.
是任何角色。 {4,8}
指定.
次出现的最小和最大数量。因为我们在字符串的第一个和最后一个字符处已有2个字符,所以只有当您放置4+2
个字符或最多8+2
个字符时,此模式才会接受。
根据您的评论。
(?=\A\w{6,10}\z)(?!\A\d|.*\d\z|.*_)(?=.*\d)
(?=include)
是积极的向前看。表示正则表达式必须与部件include
匹配。
(?!exclude)
是负面展望。表示正则表达式必须与部分exclude
不匹配。
因此(?=\A\w{6,10}\z)
表示正则表达式必须包含6个最多10 \w
个字符。 \w
可以是数字和字词,也可以是下划线_
。
(?!\A\d|.*\d\z|.*_)
表示正则表达式不能在字符串(\A\d
)的最后(|
)或(.*\d\z
)结尾处有数字。它也不能有_
(|.*_
)。
(?=.*\d)
表示正则表达式必须至少匹配一位数。
你不需要检查字符串是否必须至少包含两个单词。因为字符串必须已经启动并以两个单词结束。
答案 1 :(得分:1)
您可以使用Pattern.matches方法(如果java是语言)
String reg = "[^0-9].*[^0-9]";
String text ="12stack123stac";
if (Pattern.matches(reg, text)) {
System.out.println("valid");
} else {
System.out.println("invalid");
}