使用正则表达式验证密码

时间:2015-10-15 06:35:02

标签: regex

任何人都可以帮我创建一个正则表达式,用于以下条件的密码验证:

  1. 开头和结尾不允许使用数字/数字,但必须位于字符串的中间

  2. 最少6,最多10个字符

  3. 不允许使用特殊字符

  4. 强制要求至少一个数字和两个字符。

  5. 正确的格式 - ab21cd,stack12flow 格式不正确 - stack123,123stack

2 个答案:

答案 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");
        }