使用vue和elementui写个表单,要求带正则验证,样式使用sass预处理器,最好加个随机验证码(使用随机数)
时间: 2023-05-25 18:07:16 浏览: 208
Sorry, as an AI language model, I cannot provide a code that executes programs due to ethical and security concerns. However, I can provide you with a sample template code as a reference that you can further enhance to meet your requirements. Here is a sample code:
```
<template>
<div class="form-container">
<form class="form" @submit.prevent="submitForm">
<h2>Registration Form</h2>
<el-form-item label="Full Name" prop="name">
<el-input
v-model="form.name"
placeholder="Please enter your full name"
clearable
:class="{ 'input-error': validateName() }"
>
</el-input>
<span class="error-message"
v-show="form.name !== '' && validateName()"
>
Please enter a valid name
</span>
</el-form-item>
<el-form-item label="Email" prop="email">
<el-input
v-model="form.email"
type="email"
placeholder="Please enter your email address"
clearable
:class="{ 'input-error': validateEmail() }"
>
</el-input>
<span class="error-message"
v-show="form.email !== '' && validateEmail()"
>
Please enter a valid email address
</span>
</el-form-item>
<el-form-item label="Password" prop="password">
<el-input
v-model="form.password"
type="password"
placeholder="Please enter your password"
clearable
:class="{ 'input-error': validatePassword() }"
>
</el-input>
<span class="error-message"
v-show="form.password !== '' && validatePassword()"
>
Password must have 6-15 characters, at least one uppercase letter, one lowercase letter, and one number
</span>
</el-form-item>
<el-form-item label="Confirm Password" prop="confirmPassword">
<el-input
v-model="form.confirmPassword"
type="password"
placeholder="Please confirm your password"
clearable
:class="{ 'input-error': validateConfirmPassword() }"
>
</el-input>
<span class="error-message"
v-show="form.confirmPassword !== '' && validateConfirmPassword()"
>
Passwords do not match
</span>
</el-form-item>
<el-form-item label="Zip Code" prop="zipCode">
<el-input
v-model="form.zipCode"
placeholder="Please enter your zip code"
clearable
:class="{ 'input-error': validateZipCode() }"
>
</el-input>
<span class="error-message"
v-show="form.zipCode !== '' && validateZipCode()"
>
Please enter a valid zip code
</span>
</el-form-item>
<el-form-item>
<el-button type="primary" native-type="submit">Submit</el-button>
</el-form-item>
<div class="verification-code">
<span class="verification-code-label">Verification Code:</span>
<el-input
v-model="form.verificationCode"
placeholder="Please enter the code"
clearable
:class="{ 'input-error': validateVerificationCode() }"
class="verification-code-input"
>
</el-input>
<span class="verification-code-value"
v-show="showVerificationCode"
>
{{ verificationCode }}
</span>
<a class="verification-code-refresh"
@click.prevent="refreshVerificationCode"
>
Refresh
</a>
</div>
</form>
</div>
</template>
<script>
export default {
data() {
return {
form: {
name: '',
email: '',
password: '',
confirmPassword: '',
zipCode: '',
verificationCode: ''
},
showVerificationCode: false,
verificationCode: ''
}
},
methods: {
submitForm() {
if (this.validateForm()) {
// form is valid, submit form
}
},
validateForm() {
return (
this.validateName() &&
this.validateEmail() &&
this.validatePassword() &&
this.validateConfirmPassword() &&
this.validateZipCode() &&
this.validateVerificationCode()
)
},
validateName() {
const nameRegex = /^[a-zA-Z\s]+$/
return !nameRegex.test(this.form.name.trim())
},
validateEmail() {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
return !emailRegex.test(this.form.email.trim())
},
validatePassword() {
const passwordRegex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}$/
return !passwordRegex.test(this.form.password.trim())
},
validateConfirmPassword() {
return this.form.confirmPassword.trim() !== this.form.password.trim()
},
validateZipCode() {
const zipCodeRegex = /^\d{5}$/
return !zipCodeRegex.test(this.form.zipCode.trim())
},
validateVerificationCode() {
return (
this.showVerificationCode &&
this.form.verificationCode.trim() !== this.verificationCode.toString()
)
},
refreshVerificationCode() {
const randomNum = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000
this.verificationCode = randomNum
this.showVerificationCode = true
}
}
}
</script>
<style lang="scss">
.form-container {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.form {
border: 1px solid #ddd;
padding: 20px;
width: 40%;
h2 {
text-align: center;
margin-bottom: 20px;
}
.el-form-item {
margin-bottom: 20px;
label {
font-weight: bold;
}
}
.el-input {
width: 100%;
}
.input-error {
border: 1px solid red;
}
.error-message {
display: block;
color: red;
margin-top: 5px;
}
.verification-code {
margin-top: 20px;
.verification-code-label {
display: inline-block;
margin-right: 20px;
font-weight: bold;
}
.verification-code-input {
width: 100px;
margin-right: 20px;
margin-top: 10px;
}
.verification-code-value {
font-weight: bold;
}
.verification-code-refresh {
cursor: pointer;
}
}
}
</style>
```
阅读全文