Js正则表达式用于密码验证匹配

时间:2016-01-28 13:55:02

标签: javascript regex

我正在使用以下正则表达式与abide Foundation一起验证密码:

<form id="setPassword" action="{{ url('changePasswordWithoutToken') }}" method="POST" class="account setPassword" data-abide="ajax" novalidate="novalidate">
{{ csrfToken() }}
    <input type="hidden" name="token" value="{{ data.token }}"/>
    <div class="row">
        <div class="large-12 columns"><p>{{ 'PLEASECHOOSEAPASSWORD'|trans }}</p></div>
        <div class="large-12 columns">
            <label class="password" for="setPasswordField">
                <input type="password" id="setPasswordField" name="setPasswordField"  pattern="passwordAdditional" required placeholder="{{ 'ACCOUNTLOGINLABELPASSWORD'|trans }}" />
                <small class="error">{{ 'PASSWORDSHOULDCONTAIN'|trans }}</small>
            </label>
        </div>
    </div>
    <div class="row">
        <div class="large-12 columns">
            <label class="confirmPassword" for="confirmSetPassword">
                <input type="password" id="confirmSetPassword"  name="confirmSetPassword" data-equalto="setPasswordField" required placeholder="{{ 'CONFIRMPASSWORD'|trans }}" />
                <small class="error">{{ 'ACCOUNTREGISTRATIONERRORDIFFERENTPASSWORDS'|trans }}</small>
            </label>
        </div>
    </div>
    <div class="row">
        <div class="small-12 medium-5 large-4 columns">
            <button type="submit" class="button" id="setPasswordBtn">{{ 'SAVECHANGES'|trans }}</button>
        </div>
    </div>

JS:

模式:{     passwordAdditional:/ ^(?=。 [az])(?=。 [AZ])(?=。 \ d)(?=。 [_ \ W \ S])。{8,} / }

它似乎没有拿起符号,当我输入没有符号的新密码时,验证消息消失。它不应该因为我没有在新密码中插入任何符号。我的正则表达式错了吗?

2 个答案:

答案 0 :(得分:5)

你的正则表达式错了,你犯了两个错误:

(?=.[a-z])正在展望单个字符后跟一个小写字母,但您的目的是在字符串中找到一个小写字母,因此.应该由*修改(0次或更多次)

(?=.[_\W\S])正在展望单个字符,后跟下划线或非单词或非空格,这绝对是一切。这似乎是您检查符号,但它将始终匹配(如果至少有2个字符)。我会使用否定来实现这一目标,例如(?=.*[^a-zA-Z0-9\s])

这导致以下正则表达式

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9\s]).{8,}$/

您可以查看https://regex101.com/r/dG9xL8/1进行演示。

答案 1 :(得分:1)

希望这有帮助。

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/

它需要至少1个大写&amp;小写字母,数字和符号(#?!@$%^&*-之间)。