如何处理前端表单验证,确保用户输入合法?

【前端】表单验证 1.JS实现表单验证 在form 中添加onsubmit 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>表单验证</title> </head> <script type="text/javascript"&g... 阅读详情
  1. 引言
    表单验证在前端开发中至关重要,不仅能提升用户体验,还能减少错误数据进入后端、增强安全性。验证通常分为两大类:客户端验证和服务端验证。前端验证主要在用户提交数据前即时检测输入是否合法,通过合理的策略和工具,可以减少不必要的网络请求和后端压力。本文将介绍多种前端表单验证方法、最佳实践以及常见坑点,帮助你构建健壮、友好的验证系统。

  2. 验证方式概述
    2.1 HTML5 原生验证
    HTML5 提供了一些内置验证属性,可以无需 JavaScript 实现基本验证:

required:必填字段
pattern:正则表达式匹配
min/max、minlength/maxlength:数值或字符长度限制
type:特定类型(email、number、url 等)自动验证格式

<form>
  <input type="text" name="username" required minlength="3" maxlength="20" pattern="[a-zA-Z0-9]+" title="只能包含字母和数字">
  <input type="email" name="email" required>
  <input type="password" name="password" required minlength="6">
  <button type="submit">提交</button>
</form>

2.2 JavaScript 自定义验证
对于复杂的业务逻辑,纯 HTML 验证可能无法满足需求。利用 JavaScript,可以实时反馈和动态调整验证规则。

事件监听:使用 oninput、onblur 或 onsubmit 监听用户输入
正则表达式:针对特定格式进行匹配
错误提示:动态修改DOM显示错误信息
示例:

<form id="myForm">
  <label for="username">用户名:</label>
  <input type="text" id="username" placeholder="3-20位字母或数字">
  <span id="usernameError" class="error"></span>
  <button type="submit">提交</button>
</form>

<script>
document.getElementById("myForm").addEventListener("submit", function(event) {
  let username = document.getElementById("username").value;
  let errorSpan = document.getElementById("usernameError");
  let isValid = true;

  if (!/^[a-zA-Z0-9]{3,20}$/.test(username)) {
    errorSpan.innerText = "用户名格式不正确";
    isValid = false;
  } else {
    errorSpan.innerText = "";
  }

  if (!isValid) {
    event.preventDefault(); // 阻止提交
  }
});
</script>

2.3 使用第三方验证库
对于大型项目,第三方库能极大提升验证效率和代码可维护性。例如:

Yup:声明式对象验证库,可与Formik集成
VeeValidate:适用于Vue的表单验证插件
Formik:用于React的表单管理库,经常与Yup联合使用
React + Formik + Yup 示例:

import React from 'react';
import { useFormik } from 'formik';
import * as Yup from 'yup';

const SignupForm = () => {
  const formik = useFormik({
    initialValues: { username: '', email: '' },
    validationSchema: Yup.object({
      username: Yup.string()
        .matches(/^[a-zA-Z0-9]+$/, "只能包含字母和数字")
        .min(3, "至少3个字符")
        .max(20, "最多20个字符")
        .required("用户名必填"),
      email: Yup.string().email("无效邮箱").required("邮箱必填"),
    }),
    onSubmit: values => {
      alert(JSON.stringify(values, null, 2));
    },
  });

  return (
    <form onSubmit={formik.handleSubmit}>
      <div>
        <label>用户名</label>
        <input
          type="text"
          name="username"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.username}
        />
        {formik.touched.username && formik.errors.username ? (
          <div className="error">{formik.errors.username}</div>
        ) : null}
      </div>
      <div>
        <label>邮箱</label>
        <input
          type="email"
          name="email"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.email}
        />
        {formik.touched.email && formik.errors.email ? (
          <div className="error">{formik.errors.email}</div>
        ) : null}
      </div>
      <button type="submit">提交</button>
    </form>
  );
};

export default SignupForm;

  1. 表单验证的最佳实践
    3.1 前后端双重验证
    虽然前端验证可以提供即时反馈,但并不能保证数据安全。始终应在后端再进行一次验证,防止绕过前端验证的恶意请求。

3.2 实时反馈与用户体验
即时反馈:在用户输入时提供错误提示,减少提交时的反复修改。
友好提示:错误信息应清晰具体,告诉用户如何修正输入错误。
辅助输入:利用自动完成、占位符、输入格式化等增强用户体验。
3.3 可访问性考虑
确保错误提示和验证信息能被屏幕阅读器读取,同时表单控件应有正确的标签关联。

使用aria-live区域动态反馈错误信息。
保证表单控件有对应的label标签。
3.4 模块化与复用
将常用的验证规则封装为可复用的函数或组件,减少代码冗余。例如,封装手机号、邮箱的正则验证函数,可在不同表单中复用。

3.5 数据格式与正则表达式
确保正则表达式设计合理,覆盖大部分合理输入场景,同时允许用户进行适当的修正。可以使用在线工具(如Regex101)进行调试。

  1. 常见坑点与调试技巧
    4.1 忽略浏览器原生验证
    部分浏览器在表单提交时默认触发内置验证(例如Chrome的原生提示),如果自定义验证与原生验证冲突,可能会导致用户困惑。可以通过novalidate属性禁用原生验证:
<form novalidate>
  <!-- 表单内容 -->
</form>

4.2 异步验证
某些场景需要远程验证(例如检查用户名是否重复),此时需要在异步请求完成后更新验证状态。确保处理好异步逻辑,防止状态更新延迟或竞态条件问题。

4.3 状态管理混乱
在使用React、Vue等框架时,表单状态可能会变得复杂。建议使用专门的状态管理方案(如Formik、VeeValidate),集中管理验证状态和错误提示。

4.4 兼容性测试
确保在不同设备和浏览器上测试验证效果。由于CSS和JavaScript的差异,某些交互可能在部分浏览器中表现不一致。

  1. 总结
    处理前端表单验证确保用户输入合法的关键策略包括:

利用HTML5原生验证:通过required、pattern等属性进行基础验证。
自定义JavaScript验证:实时监听用户输入,使用正则表达式和逻辑判断进行验证,并动态反馈错误信息。
使用第三方库:在复杂项目中使用Formik、Yup、VeeValidate等工具简化验证流程和状态管理。
前后端双重验证:前端验证提升用户体验,后端验证确保数据安全。
优化用户体验与可访问性:即时反馈、清晰错误提示和辅助输入,保证所有用户(包括残障人士)都能顺利使用表单。
调试与测试:利用浏览器开发者工具、正则表达式调试工具及跨浏览器测试确保验证逻辑健壮无误。

【VUE+Elemet 】最全正则验证 + 表单验证 + 注意事项 最全最全正则验证 + 表单验证 + 注意事项 一、正则验证 1.输入字母/数字/下划线: 2.请输入中英文/数字/下划线: 3.请输入中文/英文: 4.规范金额: 5.用户名不能全是数字: 6.中文: 7.非中文: 8.限制长度: 9.数字: 10.正整数及整数: 11.请输入数字(可正负) 12.请输入数字/小数点: 13.请输入0-9999 14.大写,小写,数字,特殊字符,至少上面的三种,至少八位 15.自定义校验 16.是否合法IP地址: 17.是否手 阅读详情

相关推荐

Vue前端框架实现ElementUI的Form表单验证方式

首先,需要对form表单完成如下定义: 然后,对表单的项指定一个prop属性名,并将其绑定到model中: 2.2 用户名检验(一般检验) 通过制定rules规则检验输入数据的合法性: 效果如下:同样,先制定rules规则检验: 然后实现入侵检验方法checkPhone: 2.4 form表单数据非法检验 2.5 完整表单代码 如果本文对您有帮助的话,麻烦充电支持一下小编,谢谢♥~

qq_62175972的博客 1632

前端学习之表单验证(超详细)

表单验证: 主要用于验证input框的非空或者类型是否正确。 iView表单验证: 参数详解(html部分): <Form ref="form" :model="form" :label-width="100" :rules="formValidate" label-position="left" > <FormItem label="表单名称" prop="checkName" > <Input v-model="form.checkName" clearable s

A516331的博客 4753

前端开发利器:jQuery表单验证插件深入解析

本文还有配套的精品资源,点击获取 简介:jQuery Form 表单验证插件简化了前端数据验证流程,提高了用户体验和交互设计的专注度。它充分利用了jQuery库的优势,通过简单的API调用来实现复杂的表单验证功能。通过引入 jquery.xu72.form.4.0.js 文件、查阅帮助文档 _readme.chm ,以及使用 lang ...

weixin_42610671的博客 1831

前端之表单验证

一、简概 因为,前端经常涉及到表单验证,故此篇博客用于记录前端JS对表单验证的方法。 通过表单验证,当对form表单提交时,可以防止不合法的数据传递至后台(以及判空操作)。这里我们先定义一个表单,作为示例,其它的情况都可以此类推。 前端表单代码 <div> <form method="get" action="https://www.baidu.com" id="form"> <table align="center" style="margin

Chemlez'blog 3951

jQuery.validate.js前端表单验证实战利器

jQuery.validate.js 是最早实现声明式表单验证的 jQuery 插件之一,其诞生源于传统 JavaScript 验证方式的三大痛点:代码重复率高、逻辑耦合严重、跨浏览器兼容性差。通过将验证规则抽象为配置项,结合事件驱动机制(如onsubmitonfocusout),实现了 HTML 结构与验证逻辑的解耦。messages: { email: "请输入邮箱地址" }});该插件依托 jQuery 强大的选择器引擎和链式调用能力,支持通过class。

weixin_42160645的博客 1081

SpotBugs实战:10大类Bug检测规则详解与代码优化实例(附避坑清单)

本文深入解析SpotBugs在Java开发中的实战应用,详细讲解10大类Bug检测规则与代码优化实例,包括NPE防御、多线程安全、性能优化等关键问题。通过具体代码示例和避坑清单,帮助开发者提升代码质量,有效集成到CI/CD流程中。

weixin_42665255的博客 193

我的创作纪念日

前端表单验证是用户输入安全和数据完整性的关键。可以结合 HTML5 原生验证、JavaScript 自定义验证、正则表达式、第三方库(如 Yup)以及前端框架(如 React/Vue)来实现高效的表单校验。合理选择合适的方案,可以提升用户体验,确保数据安全。

商务合作欢迎私信我 1万+

Synopsys工具链实战:如何用VCS、DC、ICC和Calibre跑通你的第一个数字IC设计项目?

本文详细介绍了如何使用Synopsys工具链(VCS、Design Compiler、ICC和Calibre)完成数字IC设计项目,从RTL代码到GDSII版图的全流程。涵盖环境配置、RTL设计验证、逻辑综合、物理实现及签核验证等关键步骤,帮助工程师掌握高效的数字IC设计流程。

weixin_42525005的博客 196

html 输入框变红色,input输入框 输入错误时,点击注册按钮,输入框的边框变成红色,重新输入时,边框颜色恢复原来的,同时错误提示消失?...

若输入框有误,则点击立即注册,输入框的颜色会变成红色,在输入框中输入正确的值的过程中,输入框的边框变成正常的颜色。 用户名 id="form_item_account"ng-model="account"name="account"requiredng-pattern="regularList.account"ng-class="{'warnning':checkForm.account....

weixin_39959569的博客 3023

大白话讲解Numpy中什么是一维、二维、三维数组,以及5种创建方式

NumPy中提供了多种创建数组的方式,其中最基本的方式就是通过array()函数创建数组在使用该函数时直接传入列表或元组即可。 通过array()函数分别创建一维数组、二维组和三维数组,那么什么是维度呢?一维、二维、三维有什么区别? 1、什么是维度? 维度可以理解为描述数据的一种 “方向” 或者 “层次”。在数组中,维度的数量决定了我们需要用多少个索引来访问一个元素 2、一维、二维、三维的区别? (1)一维:一维数组就像是一条直线上排列的一组数据,例如: a = np.array([1, 2

1360

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

jQuery中的表单提交(方法1)

.bg_red{                 color: #FF0000;             }             .border_red{                 border:2px solid #FF0000;             }             .bg_green{                 color: #32cd32;  

霸气的名字 374

【原创,解决CLodop安装后无法调用的问题】已经安装过CLodop,但是网页上仍然提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装....”

在某些国内web网站中,需要安装一个名为“CLodop”的插件;但在实际使用过程中,即使安装了CLodop插件,网页试图调用它时还是会提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装...”,且无法完成相关打印任务 本文属原创博客,分析了解决CLodop无法被调用的问题,并附上了原理和解决方法,本质上是和跨域请求以及CORS类安全组策略相关

link_in_csdn的博客 2万+

【前端安全】用户输入安全校验

Web安全:用户输入校验关键要点 本文重点介绍了Web应用中的用户输入安全校验技术,涵盖表单验证、正则过滤、XSS防护和eval规避四个方面。主要内容包括: 表单验证:区分客户端与服务端验证,强调必填字段检查、数据类型验证和长度限制的重要性。 正则过滤:通过正则表达式实现用户名、手机号等格式校验,以及HTML标签过滤防止XSS攻击。 XSS防护工具:推荐使用DOMPurify和sanitize-html等专业工具清理恶意代码。 eval规避:指出eval的安全风险,提供函数封装和JSON解析等安全替代方案。

silverclayz的技术分享 2438

大模型_WIN10使用hyper-v安装Ubuntu24.04虚拟机_配置独立静态IP地址_连接外网_并与内网其他机器互通_通过容器安装Dify_超详细安装过程002--人工智能工作笔记0247

本文详细描述了在Hyper-V环境中配置网络、安装Ubuntu虚拟机、设置IP地址、安装Docker以及部署Dify应用的过程。首先,通过Hyper-V管理器创建外部虚拟交换机(ExternalSwitch),并配置本机、虚拟交换机和Ubuntu虚拟机的IP地址,确保网络互通。接着,在Ubuntu虚拟机中安装Open-VM-Tools和Docker,并配置Docker的国内镜像源。最后,通过Git克隆Dify源码,使用Docker Compose启动Dify应用,完成部署。整个过程涵盖了网络配置、虚拟机管理

添柴程序猿的专栏 1750

一文吃透 OData Deep Insert:从框架原理到 ABAP 实战

本文面向ABAP工程师,解析OData服务中的Deep Insert技术。文章首先阐述Deep Insert的业务背景,说明其适用于父子层级数据必须成组创建的场景(如销售订单与行项目)。随后深入框架实现机制,介绍SAP Gateway如何通过CREATE_DEEP_ENTITY方法处理嵌套请求,并强调开发者的责任边界。通过销售订单案例,文章对比了Deep Insert与$batch的适用场景差异,提供请求负载示例和DPC_EXT实现骨架代码。最后给出MPC_EXT声明深结构的三种套路,以及事务处理和错误处理

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

Snap.Hutao表单验证:用户输入校验机制

Snap.Hutao作为一款专业的原神工具箱,提供了完善的表单验证机制确保用户输入数据的准确性和安全性。本文将深入解析其验证架构和实现原理。 ## 核心验证架构 Snap.Hutao的表单验证基于响应式验证模式,核心组件位于Web/Response/目录: - **ResponseValidator.cs**:验证入口类,提供静态验证方法 - **DefaultResponseValidat

gitblog_00660的博客 294

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

网络安全:(十五)前端用户输入的防护策略:防范注入与非法字符

然而,未受控或恶意的用户输入可能引发诸如 SQL 注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等一系列安全问题。本文将从输入验证、编码处理、防止脚本注入等方面,详细解析前端用户输入的防护策略,帮助开发者构建更安全的应用。通过这些策略,开发者能够有效降低注入攻击和非法字符导致的安全风险,为用户提供更加安全可靠的 web 应用体验。前端用户输入防护是安全开发的第一道防线,但需要结合后端验证和输出转义来全面保护系统。用户输入是应用和用户之间的重要交互桥梁,但这也为攻击者提供了利用漏洞的机会。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1982

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

前端通用表单验证实战:登录 / 注册 / 预订表单通用解决方案

尤其是旅游、电商等涉及用户交互的网站,登录、注册、预订等表单的校验逻辑直接影响用户操作流程。for="reg-email">邮箱 id="reg-email" required placeholder="请输入您的邮箱">// ===== 校验规则2:邮箱格式校验(存在邮箱字段时才执行) =====// ===== 校验规则3:密码长度校验(存在密码字段时才执行) =====validateForm('booking-form');// ===== 校验通过:提交成功并重置表单 =====

2501_94563037的博客 815

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JavaScript实现表单验证(包含实例)

表单验证表单验证意义与场景降低服务器压力提升用户体验表单验证举例界面效果展示 表单验证意义与场景 降低服务器压力 拦截不合格的数据,避免直接提交到服务器,可以显著降低服务器开销 提升用户体验 早期的互联网,表单项都是非常多的,注册个账号,经常需要填写20+个字段。而其中有一个填写不正 确就要等待几十秒时间。如果有了表单验证,反馈是实时的,而且脚本还能把你定位到填写错误的具体 字段。现在虽然无刷新技术早已普及,但是只依赖服务端验证,还是会有几百毫秒的延迟,实际使用会 有一种很难受的粘滞感。 表单验证举例 js

Cavewang的博客 4370

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【vue2】使用elementUI进行表单验证实操(附源码)

vue2使用elementUI完成表单验证。

嗨,朋友你好!我是前端领域的工作者 9316

Excalidraw表单验证机制设计与用户体验平衡

Excalidraw在AI驱动的创作场景中,通过前端渐进反馈与后端智能解析实现表单验证,在保障系统安全的同时避免打断用户灵感。采用弱约束、强引导的设计,结合语义容错与非侵入交互,让验证成为隐形的协作助手,既守护稳定性,又尊重创造性表达。

weixin_35761094的博客 577

JavaScript的基础表单验证

一般来说绝大多数网站都会有用户注册、用户登录这些基本的功能。 那么用户注册具体是如何实现的呢? 登录页面 login.jsp 用户登录 JavaSpri校验 登录表单验证 1. 给登录按钮绑定点击事件 2. 获取用户姓名和密码的值 3. 判断姓名是否为空 如果姓名为空,提示用户(span标签赋值...

zcj666999的博客 1002
上一篇: jQuery 中的 Ajax 详解
下一篇: Webpack、Vite区别知多少?
Humble-H
博客等级 码龄6年 135粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值