验证规则
身份证验证
const idCard = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入身份证号'))
} else {
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
if (reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的身份证号'))
}
}
}
手机号验证
const checkPhone = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入联系方式'))
} else {
const reg = /^1[3|4|5|7|8][0-9]\d{8}$/
if (reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的电话'))
}
}
}
密码验证
const checkPass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码'))
} else {
if (this.loginForm.checkPass !== '') {
this.$refs.loginForm.validateField('checkPass')
}
callback()
}
}
const checkPassAgain = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.loginForm.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
名字验证
const enName = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入英文名'))
} else {
const reg = /^[a-zA-Z]+$/
if (value.length < 100 && reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的英文名'))
}
}
}
const chnName = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入中文名'))
} else {
const reg = /^[\u4e00-\u9fa5]+$/
if (value.length < 100 && reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的中文名'))
}
}
}
邮箱验证
const validateEmail = (rule, value, callback) => {
if (/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/.test(value) || !value) {
callback()
} else {
callback(new Error('请输入正确邮箱'))
}
}
在组件中使用
<template>
<div class="register">
<el-card class="register-card">
<div slot="header" class="clearfix">
<span>注册</span>
</div>
<el-form status-icon label-width="140px" :rules="rules" ref="loginForm" :model="loginForm" style="margin-top:20px">
<el-form-item label="用户名" prop="username">
<el-input v-model="loginForm.username" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="loginForm.password" placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="checkPass">
<el-input type="password" v-model="loginForm.checkPass" placeholder="请再次输入密码"></el-input>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="loginForm.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="短信验证" class="Verification" style="width:530px" prop="verifyCode">
<!-- 验证码 -->
<el-input v-model="loginForm.verifyCode" placeholder="请输入验证码" style="width:50%"></el-input>
<!-- 发送验证码 -->
<el-button icon="el-icon-mobile-phone" @click="send" style="width: 40%; margin-left: 37px;" plain :disabled="disabled=!show">
<span v-show="show">获取验证码</span>
<span v-show="!show" class="count">{{count}} s</span>
</el-button>
</el-form-item>
<el-form-item prop="agree">
<!-- 同意选项 -->
<el-checkbox v-model="loginForm.agree">我同意并接受<span style="color:red">《协议》</span></el-checkbox>
</el-form-item>
<!-- 注册按钮 -->
<div class="register-button">
<el-button @click="submitForm('loginForm')" type="primary">立即注册</el-button>
</div>
</el-form>
</el-card>
</div>
</template>
<script type="text/javascript">
import { Register } from '@/api/user'
export default {
name: 'registerPage',
data () {
const chName = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入用户名'))
} else {
const reg = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/
if (value.length < 100 && reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的用户名'))
}
}
}
const checkPass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码'))
} else {
if (this.loginForm.checkPass !== '') {
this.$refs.loginForm.validateField('checkPass')
}
callback()
}
}
const checkPassAgain = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.loginForm.password) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
const checkPhone = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入联系方式'))
} else {
const reg = /^1[3|4|5|7|8][0-9]\d{8}$/
if (reg.test(value)) {
callback()
} else {
return callback(new Error('请输入正确的电话'))
}
}
}
const validator = function (rule, value, callBack) {
value ? callBack() : callBack(new Error('请勾选协议'))
}
return {
loginForm: {
username: 'root',
password: '123456',
checkPass: '123456',
phone: '18238300601',
verifyCode: '',
agree: false
},
show: true,
count: '',
rules: {
username: [
{ required: true, validator: chName, trigger: 'blur' }
],
password: [
{ required: true, validator: checkPass, trigger: 'blur' },
{ min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur' }
],
checkPass: [
{ required: true, validator: checkPassAgain, trigger: 'blur' },
{ min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur' }
],
phone: [
{ required: true, validator: checkPhone, trigger: 'blur' }
],
verifyCode: [
{ required: true, message: '请输入您的验证码' },
{ pattern: /^\d{6}$/, message: '验证码为6位数字' }
],
agree: [{ validator }]
}
}
},
methods: {
submitForm (formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
try {
const res = await Register(this.loginForm)
console.log(res)
} catch (err) {
console.log(err, '获取失败')
}
} else {
console.log('error submit!!')
return false
}
})
},
send () {
if (this.loginForm.phone !== '') {
if (/^1[3|4|5|7|8][0-9]\d{8}$/.test(this.loginForm.phone)) {
const TIME_COUNT = 60
if (!this.timer) {
this.count = TIME_COUNT
this.show = false
this.timer = setInterval(() => {
if (this.count > 0 && this.count <= TIME_COUNT) {
this.count--
} else {
this.show = true
clearInterval(this.timer)
this.timer = null
}
}, 1000)
}
this.$axios({
url: '/ali/registerSmsCode/18238300601',
method: 'get'
}).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
} else {
this.$message({
message: '手机号格式不对',
type: 'warning'
})
}
} else {
this.$message({
message: '请先填写手机号',
type: 'warning'
})
}
}
}
}
</script>