前情

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的表单验证在小程序上不生效的更多相关文章

  1. flask框架(八)—自定义命令flask-script、多app应用、wtforms表单验证、SQLAIchemy

    自定义命令flask-script 用于实现类似于django中 python3 manage.py runserver ...类似的命令,用命令行启动项目 首先安装:pip3 install fla ...

  2. SPA项目之CRUD+表单验证

    1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...

  3. django项目中form表单和ajax的文件上传功能。

    form表单文件上传 路由 # from表单上传 path('formupload/',apply.formupload,name='formupload/'), 方法 # form表单文件上传 de ...

  4. jquery validate表单验证插件-推荐

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  5. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...

  6. jquery validate表单验证插件

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  7. jquery validate表单验证插件的基本使用方法及功能拓展

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.    1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮助提 ...

  8. vue表单验证:vee-validate中文提示

    官方文档:https://baianat.github.io/vee-validate/guide/ vee-validate可用于vue项目中进行表单验证,使用方法在官方API上都可以查到: 使用过 ...

  9. Vue如何使用vee-validate表单验证

    Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery ...

  10. Spring进行表单验证

    转自:https://www.tianmaying.com/tutorial/spring-form-validation 开发环境 IDE+Java环境(JDK 1.7或以上版本) Maven 3. ...

随机推荐

  1. 系统编程-进程-当fork遇到管道,可能碰撞出什么?

    第一部分 1. 直接上代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int globv ...

  2. SuperMap iServer&iPortal&iEdge结合CAS 5.3服务器实现单点登录

    2023-10-19 更新,由于阿里云maven镜像仓库里缺失了很多CAS5.3 依赖,如果缺少可以用附件里的同步到本地仓库 链接:https://pan.baidu.com/s/14DhRci_Am ...

  3. 《HelloGitHub》第 102 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  4. Phpstorm 插件

    Symfony Plugin - 支持 Symfony 2,3,4 ...Laravel Plugin - 支持 Laravel.env files support - 支持.env 文件BashSu ...

  5. ftrace options 中的irq-info

    /sys/kernel/debug/tracing/options/irq_info 是 ftrace 中的一个选项,用于启用或禁用有关中断的详细信息的跟踪. options/irq_info 的具体 ...

  6. ftrace的trace_options

    ftrace 中的 trace_options 选项用于控制追踪数据的收集和显示方式.你可以通过 /sys/kernel/debug/tracing/trace_options 文件来设置这些选项.每 ...

  7. Kernel调试追踪技术之 Kprobe on ARM64

    kprobe是什么? kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2 ...

  8. 关于BarchNorm的一些学习

    <Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift> ...

  9. 基于Python后端构建多种不同的系统终端界面研究

    在我们一般开发系统的时候,往往会根据实际需要做出各种不同的系统终端界面,如基于BS的,CS.APP.小程序等等,一般都是基于一个统一接入的Web API后端,本篇系统探寻对基于Python后端构建多种 ...

  10. python使用协程完成批量模拟支付

    import asyncio import sys from queue import Queue sys.path.append("../") # from tool.__ini ...