uni-app项目uview的表单验证在小程序上不生效
前情
uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app,在uniapp生态中uView是其中非常好的全平台的第三方开源ui库,我在公司项目中果断的使用了它。
坑位
在用uView做小程序表单验证的时候,对于普通的验证是没有问题,如果要用到正则或者自定义验证方法,发现在小程序不生效。
Why?
是自己大意了没有闪,没细看官方文挡,官方文挡在Form表单文挡最开头就强调了,微信小程序要特殊处理,对于使用正则也是不行,有可能是用了正则就是走的自定义验证方法了吧。

解决方案
在小程序中,使用uView的表单验证如果你使用了正则验证或者自定义验证方法验证,那就不能通过:rules给form组件传验证规则,只能通过setRules(rules)手动指定form的验证规则才行。
不需要手动指定验证规则:
<template>
<view class="page-container">
<u-form
:model="form"
:rules="rules"
ref="addressForm"
>
<view class="form-wrap">
<u-form-item
label="姓名:"
required
labelWidth="auto"
borderBottom
prop="name"
>
<u--input
v-model="form.name"
inputAlign="right"
placeholder="请输入"
border="none"
type="number"
></u--input>
</u-form-item>
<u-form-item
label="手机号码:"
required
labelWidth="auto"
borderBottom
prop="phone"
>
<u--input
v-model="form.phone"
inputAlign="right"
placeholder="请输入"
border="none"
type="number"
></u--input>
</u-form-item>
</view>
</u-form>
<button @click="submit">提交</button>
</view>
</template>
<script>
export default {
data() {
return {
form: {
name: '',
phone: '',
},
rules: {
name: [
{
required: true,
message: '请输入联系人姓名',
trigger: ['blur', 'change']
}
],
phone: [
{
required: true,
message: '请输入手机号码',
trigger: ['blur', 'change']
}
]
}
}
},
methods: {
submit() {
this.$refs.addressForm.validate().then(res => {
uni.$u.toast('校验通过');
}).catch(errors => {
uni.$u.toast('校验失败');
})
}
}
}
</script>
<style lang="scss" scoped>
.form-wrap{
padding:0 32rpx 40rpx 32rpx;
::v-deep{
.u-form-item__body__left__content__label{
font-size: 32rpx!important;
color: #111111;
}
.u-form-item__body{
padding: 32rpx 0;
}
.input-placeholder{
text-align: right;
}
.u-input__content__field-wrapper{
margin-right: 4px;
}
}
}
</style>
需要手动指定验证规则,因为姓名使用了pattern/手机又使用了自定义的验证方法:
<template>
<view class="page-container">
<u-form
:model="form"
ref="addressForm"
>
<view class="form-wrap">
<u-form-item
label="姓名:"
required
labelWidth="auto"
borderBottom
prop="name"
>
<u--input
v-model="form.name"
inputAlign="right"
placeholder="请输入"
border="none"
type="number"
></u--input>
</u-form-item>
<u-form-item
label="手机号码:"
required
labelWidth="auto"
borderBottom
prop="phone"
>
<u--input
v-model="form.phone"
inputAlign="right"
placeholder="请输入"
border="none"
type="number"
></u--input>
</u-form-item>
</view>
</u-form>
<button @click="submit">提交</button>
</view>
</template>
<script>
export default {
data() {
return {
form: {
name: '',
phone: '',
},
rules: {
name: [
{
required: true,
message: '请输入联系人姓名',
trigger: ['blur', 'change']
},
// 正则判断为字母或数字
{
pattern: /^[\u4e00-\u9fa5]+$/g,
// 正则检验前先将值转为字符串
transform(value) {
return String(value);
},
message: '只能包含字母或数字'
},
],
phone: [
{
required: true,
message: '请输入手机号码',
trigger: ['blur', 'change']
}, {
validator: (rule, value, callback) => {
return uni.$u.test.mobile(value);
},
// pattern: /^1\d{10}$/,
message: '请输入正确的手机号',
trigger: ['blur', 'change']
}
]
}
}
},
mounted() {
// 手动提定rules
this.$refs.addressForm.setRules(this.rules);
},
methods: {
submit() {
this.$refs.addressForm.validate().then(res => {
uni.$u.toast('校验通过');
}).catch(errors => {
uni.$u.toast('校验失败');
})
}
}
}
</script>
<style lang="scss" scoped>
.form-wrap{
padding:0 32rpx 40rpx 32rpx;
::v-deep{
.u-form-item__body__left__content__label{
font-size: 32rpx!important;
color: #111111;
}
.u-form-item__body{
padding: 32rpx 0;
}
.input-placeholder{
text-align: right;
}
.u-input__content__field-wrapper{
margin-right: 4px;
}
}
}
</style>
uni-app项目uview的表单验证在小程序上不生效的更多相关文章
- flask框架(八)—自定义命令flask-script、多app应用、wtforms表单验证、SQLAIchemy
自定义命令flask-script 用于实现类似于django中 python3 manage.py runserver ...类似的命令,用命令行启动项目 首先安装:pip3 install fla ...
- SPA项目之CRUD+表单验证
1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...
- django项目中form表单和ajax的文件上传功能。
form表单文件上传 路由 # from表单上传 path('formupload/',apply.formupload,name='formupload/'), 方法 # form表单文件上传 de ...
- jquery validate表单验证插件-推荐
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
- JS表单验证-12个常用的JS表单验证
JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...
- jquery validate表单验证插件
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
- jquery validate表单验证插件的基本使用方法及功能拓展
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮助提 ...
- vue表单验证:vee-validate中文提示
官方文档:https://baianat.github.io/vee-validate/guide/ vee-validate可用于vue项目中进行表单验证,使用方法在官方API上都可以查到: 使用过 ...
- Vue如何使用vee-validate表单验证
Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery ...
- Spring进行表单验证
转自:https://www.tianmaying.com/tutorial/spring-form-validation 开发环境 IDE+Java环境(JDK 1.7或以上版本) Maven 3. ...
随机推荐
- Kubernetes的Pod调度:让你的应用像乘坐头等舱!
一.Kubernetes 中 Pod 调度的重要性 在 Kubernetes 的世界里,Pod 调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的 Pod)送到最合适的停车位(节点).调度不仅关 ...
- DBA面试资源合集(含Oracle、MySQL、Redis等)-墨天轮
如今正值金九银十招聘季,众多企业开放大批岗位等待新力量的注入,各位DBA们,你们是否正在激情备战中? 作为企业数据化进程中十分重要的一环,DBA的职责越来越重要,作为高薪资岗位之一,应聘DBA的竞争也 ...
- Vue3 的emit3 属性和 props 属性?
使用场景:使用父子组件通信的时候 : 作用: 用来声明组件有哪些自定义事件,不在emtis里面都会当成原生事件,绑定给组件的根标 签. 好处: 不在像 vue2 使用 .native 修饰符 在 v ...
- Python 潮流周刊#73:让我们对 PyPI 温柔一点,好吗?(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- shiro 框架基本讲解【转载】
shiro 框架基本讲解[转载] 什么是权限管理: 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而 ...
- 这些HTTP协议状态码你知道吗?
使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1x ...
- ToDesk云电脑堪比万元PC?黑悟空、老头环及战锤40K实测体验!
2009年,OnLive首次在旧金山游戏开发者大会推出"云游戏"的概念,但受限于当时的网络宽带技术,云游戏并不被十分看好.现如今,5G时代已然到来,数据通量和画质传输给予云游戏崛起 ...
- css动画效果(边框流光闪烁阴影效果)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa7odDQYuaatklJUMc5anU10PWLAt14rNnNUD6oHJG9U63fc0y ...
- vue3 + typescript + element-plus 大文件上传
大文件上传 思路:前端获取 file 文件对象使用 slice 方法截取切片,然后异步上传切片,再合并 技术栈 TypeScript Vue3 Element-plus Nodejs 客户端实现 创建 ...
- 重温c语言之,7天开整,就是随便的写写,第二天
一:操作符 除法: 如果都是整数,除数,被除数都是整数,那么结果:就是整数的商(没有小数部分的),例如:7/2=3: 如果除数或者被除数其中一个是浮点数,那么结果就是(条件是:能除尽的,并且小数在基础 ...