JavaScript---网络编程(12)--DHTML技术演示(5)-form表单验证技术(正则)-2

简介: JavaScript---网络编程(12)--DHTML技术演示(5)-form表单验证技术(正则)-

代码演示:

3form3.html

<html>
    <head>
        <title>DHTML技术演示---注册表单的验证且控制提交--前端校验</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
            function checkUserName(){
                var oUserNameNode = document.getElementsByName("userName")[0];
                var userName = oUserNameNode.value;
                //用正则检验
                var reg = new RegExp("[a-z]{4}","i");//包含4个连续的字母就可以,注意"i"的双引号不能省略
                //i---表示忽略大小写
                //var regg =new RegExp("^[a-z]{4}$","i") ;//只含4个连续的字母,注意"i"中的双引号不能省略
                //^代表开始   $代表结束
                var oUserNameSpan = document.getElementById("userNameSpan");
                if(reg.test(userName)){
                    oUserNameSpan.innerHTML="用户名格式正确".fontcolor("green");
                    return true;
                }else{
                    oUserNameSpan.innerHTML="用户名格式错误".fontcolor("red");
                    return false;                   
                }
            }
            function checkPwd(){
                var oUserPwdNode = document.getElementsByName("pwd")[0];
                var pwd = oUserPwdNode.value;
                var reg2 = new RegExp("^[\\w\\d]{6,9}$");
                if(reg2.test(pwd)){
                    document.getElementById("userPwdSpan").innerHTML="密码格式符合要求".fontcolor("green");
                    return true;
                }else{
                    document.getElementById("userPwdSpan").innerHTML="密码长度必须是6-9位的数字字母或下划线".fontcolor("red");
                    return false;
                }
            }
            function checkUser(){
                if(checkUserName() && checkPwd() ){//如果还有其他项需要在提交前验证,直接把那个验证函数写这里就行
                    return true;
                }else{
                    return false;
                }
            }
        </script>
    </head>
    <body>
        <!--通过注册onsubmit事件响应来控制表单的提交,如果return false则不会提交,而return true则会提交。如果不注册onsubmit事件即是return true
        onsubmit 当表单将要被提交时触发。 
        <form action="/myDhtmlProj/servlet/RegServlet" onsubmit="return true;">
        -->
        <form action="/myDhtmlProj/servlet/RegServlet" onsubmit="return checkUser();">
            用户名:<input type="text" name="userName" onblur="checkUserName()" />
            <span id="userNameSpan"></span>
            <!--为了演示清楚,密码这里也用type="text"了,其实应该用type="password"的-->
            密码:<input type="text" name="pwd" onblur="checkPwd()" />
            <span id="userPwdSpan"></span>
            <br/>
            <input type="submit" value="注册"/>
        </form>
        <hr/>
        <!--表单提交方式2---自己写个按钮来代替form自带的提交按钮-->
        <form id="userinfo" action="/dhtmlProj/servlet/RegServlet" >
            用户名:<input type="text" name="userName" onBlur="checkUserName2()"/>
            <span id="userNameSpan2"></span><br/>
            密码:<input type="text" name="pwd" onBlur="checkPwd2()"/>
            <span id="userPwdSpan2"></span>
            <br/>
        </form>
        <input type="button" value="注册" onclick="mySubmit()" />
        <script type="text/javascript">
            function mySubmit(){
                var oFormNode = document.getElementById("userinfo");
                if(checkUserName2()&&checkPwd2()){
                    oFormNode.submit();//submit 提交表单。 
                }
            }
            function checkUserName2(){
                var oUserNameNode = document.getElementsByName("userName")[1];
                var userName = oUserNameNode.value;
                //用正则检验
                var reg = new RegExp("[a-z]{4}","i");//包含4个连续的字母就可以,注意"i"的双引号不能省略
                //i---表示忽略大小写
                //var regg =new RegExp("^[a-z]{4}$","i") ;//只含4个连续的字母,注意"i"中的双引号不能省略
                //^代表开始   $代表结束
                var oUserNameSpan = document.getElementById("userNameSpan2");
                if(reg.test(userName)){
                    oUserNameSpan.innerHTML="用户名格式正确".fontcolor("green");
                    return true;
                }else{
                    oUserNameSpan.innerHTML="用户名格式错误".fontcolor("red");
                    return false;                   
                }
            }
            function checkPwd2(){
                var oUserPwdNode = document.getElementsByName("pwd")[1];
                var pwd = oUserPwdNode.value;
                var reg2 = new RegExp("^[\\w\\d]{6,9}$");
                if(reg2.test(pwd)){
                    document.getElementById("userPwdSpan2").innerHTML="密码格式符合要求".fontcolor("green");
                    return true;
                }else{
                    document.getElementById("userPwdSpan2").innerHTML="密码长度必须是6-9位的数字字母或下划线".fontcolor("red");
                    return false;
                }
            }
        </script>
    </body>
</html>


show.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>这是注册后的显示页面</title>
    </head>
    <body>
        <%
            out.println(request.getAttribute("uName"));
            out.println(request.getAttribute("pwd"));
         %>
        <%  
            for(int i=0;i<3;i++){
            //这个下面可以写html代码
        %>
            <div>欢迎</div>
        <% 
            //这个上面可以写html代码
            } 
        %>
    </body>
</html>


RegServlet.java 

这个是new一个Servlet。

会自动给我们配好web.xml

image.png

package cn.hncu.user;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//设置编码
        String name = request.getParameter("userName");//userName为提交过来的表单中的一个input的name属性
        String pwd = request.getParameter("pwd");
        //System.out.println(name);
        request.setAttribute("uName", "hncu---"+name);
        request.setAttribute("pwd", "pwd---"+pwd);
        request.getRequestDispatcher("/dhtml/6formsubmit/jsps/show.jsp").forward(request, response);
        //输出,导向另外的页面显示
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>RegServlet</servlet-name>
    <servlet-class>cn.hncu.user.RegServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RegServlet</servlet-name>
    <url-pattern>/servlet/RegServlet</url-pattern>
  </servlet-mapping>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

360浏览器8.1 演示图片:

image.png

当格式都填写正确时,点注册按钮,自动跳转到另外的页面。

image.png

有一个格式错误时,点注册按钮不会有反应的。

image.png

image.png

注册表单的验证且控制提交–前端校验–最终版本:

<html>
    <head>
        <title>DHTML技术演示---注册表单的验证且控制提交--前端校验--最终版本</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <script type="text/javascript">
            function check(name,reg,spanId,okInfo,errInfo){
                var value = document.getElementsByName(name)[0].value;
                //用正则检验
                var oSpanNode = document.getElementById(spanId);
                if(reg.test(value)){
                    oSpanNode.innerHTML=okInfo.fontcolor("green");
                    return true;
                }else{
                    oSpanNode.innerHTML=errInfo.fontcolor("red");
                    return false;
                }
            }
            function checkUserName(){
                var reg = new RegExp("[a-z]{4}","i");//包含4个连续的字母,注意"i"中的双引号不能省略
                return check("userName",reg,"userNameSpan","用户名格式正确","用户名格式错误");
            }
            function checkPwd(){
                var reg = new RegExp("^[\\w\\d]{6,9}$");
                return check("pwd",reg,"userPwdSpan","密码格式符合要求","密码长度必须是6-9位的数字字母或下划线");
            }
            function checkPwd2(){
                var flag;
                var pwd = document.getElementsByName("pwd")[0].value;
                var pwd2 = document.getElementsByName("pwd2")[0].value;
                var oSpanNode = document.getElementById("userPwd2Span");
                if(pwd==pwd2){
                    oSpanNode.innerHTML="两次密码一致".fontcolor("green");
                    flag = true;
                }else{
                    oSpanNode.innerHTML="两次密码不一致".fontcolor("red");
                    flag = false;
                }
                return flag;
            }
            function checkMail(){
                var reg = /^\w+@\w+(\.\w+)+$/i;
                return check("mail",reg,"userMailSpan","邮箱格式正确","邮箱格式不正确");
            }
            function checkUser(){//控制表单的提交
                if(checkUserName() && checkPwd() && checkPwd2() && checkMail() ){
                    return true;
                }else{
                    return false;
                }
            }
        </script>
    </head>
    <body>
        <form action="/myDhtmlProj/servlet/RegServlet" onsubmit="return checkUser();">
            用户名:<input type="text" name="userName" onblur="checkUserName()" />
            <span id="userNameSpan"></span>
            <br/>
            输入密码:<input type="text" name="pwd" onblur="checkPwd()" />
            <span id="userPwdSpan"></span>
            <br/>
            确认密码:<input type="text" name="pwd2" onBlur="checkPwd2()"/>
            <span id="userPwd2Span"></span>
            <br/>
            邮件地址:<input type="text" name="mail" onblur="checkMail()" />
            <span id="userMailSpan"></span>
            <br/>
            <input type="submit" value="注册">
        </form>
    </body>
</html>

360浏览器8.1 演示结果:

image.png

只有全部格式填写正确后再点注册按钮才会有响应。

image.png

全部格式填写正确后,点注册按钮后的页面,其实就是跳到show.jsp页面了。(自己可以随便定位到哪的)


image.png

目录
相关文章
|
7月前
|
JavaScript 前端开发 IDE
TypeScript vs. JavaScript:技术对比与核心差异解析
TypeScript 作为 JavaScript 的超集,通过静态类型系统、编译时错误检测和强大的工具链支持,显著提升代码质量与可维护性,尤其适用于中大型项目和团队协作。相较之下,JavaScript 更灵活,适合快速原型开发。本文从类型系统、错误检测、工具支持等多维度对比两者差异,并提供技术选型建议,助力开发者合理选择。
1398 1
|
7月前
|
监控 JavaScript 前端开发
JavaScript加密与解密技术:Hook技术应用案例分析
以上案例展示了如何利用JavaScript Hook技术结合强大且广泛采纳标准化算法(如AES),无缝地集成进Web应用程序以增强通信安全性。此种方法不仅能够确保敏感信息得到有效保护,并且由于它们操作适度透明、无需重构已存在代码基础架构而具备较高实际可行性及易操作性。
306 11
|
7月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
493 0
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
545 1
|
JavaScript 前端开发 API
探索后端技术:Node.js的优势和实际应用
【10月更文挑战第6天】 在当今数字化时代,后端开发是任何成功软件应用的关键组成部分。本文将深入探讨一种流行的后端技术——Node.js,通过分析其核心优势和实际应用案例,揭示其在现代软件开发中的重要性和潜力。
1044 2
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
11月前
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
266 15
|
11月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
280 4
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
197 0
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
614 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
下一篇
开通oss服务