我正在使用以下正则表达式与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,} / }
它似乎没有拿起符号,当我输入没有符号的新密码时,验证消息消失。它不应该因为我没有在新密码中插入任何符号。我的正则表达式错了吗?
答案 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;小写字母,数字和符号(#?!@$%^&*-
之间)。