javascript - 在 vuejs 中使用 vuelidate 验证密码?
问题描述
validations: {
user: {
password: { required,
containsUppercase: function(value) {
return /[A-Z]/.test(value)
},
containsLowercase: function(value) {
return /[a-z]/.test(value)
},
containsNumber: function(value) {
return /[0-9]/.test(value)
},
containsSpecial: function(value) {
return /[#?!@$%^&*-]/.test(value)
},
minLength: minLength(8),maxLength: maxLength(19) },
confirmPassword: { required, sameAsPassword: sameAs("password") },
},
}
<input
:type="passwordFieldType"
v-model="user.password"
v-model.trim="$v.user.password.$model"
id="password"
name="password"
class="input-section-three-login"
:class="{'is-invalid': validationStatus($v.user.password) }"
placeholder="Enter new password"
:maxlength="maxpassword"
v-on:keypress="isPassword($event)"
/>
<button v-on:click="registerMe" :disabled="user.confirmPassword != user.password " :class="(isDisabled) ? '' : 'selected'" > Register
</button>
如何使用 vuelidate 验证密码,我在 validationStatus 中有正则表达式值,在按钮上单击如何检查正则表达式验证。
尝试使用正则表达式验证是否成功验证密码,否则移动到下一个屏幕,直到成功,他需要留在当前屏幕。
解决方案
尝试以下步骤来解决问题
第1步:validations
修改如下
validations: {
user: {
password: { required,
valid: function(value) {
const containsUppercase = /[A-Z]/.test(value)
const containsLowercase = /[a-z]/.test(value)
const containsNumber = /[0-9]/.test(value)
const containsSpecial = /[#?!@$%^&*-]/.test(value)
return containsUppercase && containsLowercase && containsNumber && containsSpecial
},
minLength: minLength(9),
maxLength: maxLength(19),
},
confirmPassword: { required, sameAsPassword: sameAs("password") },
},
},
第二步:RegisterMe
按钮点击事件
methods: {
registerMe() {
this.submitted = true;
this.$v.$touch();
if (this.$v.$invalid) {
return false; // stop here if form is invalid
} else {
alert("Form Valid. Move to next screen");
}
},
},
第 3 步:compute
禁用Register
按钮的功能
computed: {
isDisabled() {
return this.$v.$invalid;
},
},
第 4 步:HTML 模板就像
<form @submit.prevent="registerMe" novalidate>
<div class="form-group">
<input
type="password"
class="form-control"
placeholder="Enter Password"
value=""
v-model="user.password"
autocomplete="off"
/>
<div
v-if="this.submitted && $v.user.password.$error"
class="invalid-feedback left">
<span v-if="!$v.user.password.required">Password is required</span>
<span v-if="user.password && !$v.user.password.valid">Password contains atleast One Uppercase, One Lowercase, One Number and One Special Chacter</span>
<span v-if="user.password && $v.user.password.valid && !$v.user.password.minLength">Password must be minimum 9 characters</span>
<span v-if="user.password && !$v.user.password.maxLength">Password must be maximum 19 characters</span>
</div>
</div>
<div class="form-group">
<input
type="password"
class="form-control"
placeholder="Confirm Password"
value=""
v-model="user.confirmPassword"
autocomplete="off"
/>
<div
v-if="this.submitted && $v.user.confirmPassword.$error"
class="invalid-feedback left"
>
<span v-if="!$v.user.confirmPassword.required"
>Confirm Password is required</span
>
<span
v-if="
user.confirmPassword && !$v.user.confirmPassword.sameAsPassword
"
>Password and Confirm Password should match</span
>
</div>
</div>
<input
type="submit"
class="btnRegister"
value="Register"
:disabled="this.isDisabled"
/>
</form>