设计一个html+css+js的注册页,对于注册信息进行合法性检测

news2024/11/24 22:53:05

  1. 综合使用HTML、JavaScript和CSS进行注册页面设计,实现以下若干功能:
    1. 注意整个页面的色调和美观
    2. 使用Frameset+Table布局(div也可)
    3. 对用户ID和用户名、口令不符合条件及时判断
    4. 对口令不一致进行及时判断(34的及时判断,要求提示信息必须显示在同一个页面,也就是说显示在当前的行的后面或者上面或者下面)
    5. 判断Email地址是否合法
    6. 在“提交”后能在新页面显示所有的输入信息

效果展示

以下是代码实现

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>注册页面</title>
    <style>
      body {
        font-family: Arial, sans-serif;
        background-color: #f4f4f4;
        color: #333;
      }
      .container {
        width: 50%;
        margin: 0 auto;
        background: #fff;
        padding: 20px;
        border-radius: 5px;
        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
      }
      h2 {
        text-align: center;
        color: #4caf50;
      }
      .form-group {
        margin-bottom: 15px;
      }
      label {
        display: block;
        margin-bottom: 5px;
      }
      input[type="text"],
      input[type="password"],
      input[type="date"],
      input[type="email"],
      input[type="tel"] {
        width: 100%;
        padding: 8px;
        box-sizing: border-box;
      }
      .error {
        color: red;
        font-size: 0.9em;
      }
      button {
        background-color: #4caf50;
        color: white;
        padding: 10px 15px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
      }
      button[type="reset"] {
        background-color: #f44336;
      }
      .radio-group {
        display: flex;
        gap: 10px;
      }
      .radio-group label {
        display: flex;
        align-items: center;
      }
      .radio-group input[type="radio"] {
        margin-right: 5px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h2>注册页面</h2>
      <form id="registrationForm" onsubmit="return validateForm()">
        <div class="form-group">
          <label for="userId">用户ID (6-8位):</label>
          <input type="text" id="userId" name="userId" required />
          <span class="error" id="userIdError"></span>
        </div>
        <div class="form-group">
          <label for="username">用户名 (2-10位):</label>
          <input type="text" id="username" name="username" required />
          <span class="error" id="usernameError"></span>
        </div>
        <div class="form-group">
          <label for="password">口令 (6-8位,不能与用户ID相同):</label>
          <input type="password" id="password" name="password" required />
          <span class="error" id="passwordError"></span>
        </div>
        <div class="form-group">
          <label for="confirmPassword">确认口令:</label>
          <input
            type="password"
            id="confirmPassword"
            name="confirmPassword"
            required
          />
          <span class="error" id="confirmPasswordError"></span>
        </div>
        <div class="form-group">
          <label for="birthday">生日 (格式: yyyy-mm-dd):</label>
          <input
            type="text"
            id="birthday"
            name="birthday"
            placeholder="yyyy-mm-dd"
            required
          />
          <span class="error" id="birthdayError"></span>
        </div>
        <div class="form-group">
          <label>学历:</label>
          <div class="radio-group">
            <label
              ><input
                type="radio"
                name="education"
                value="专科"
                required
              />专科</label
            >
            <label
              ><input type="radio" name="education" value="本科" />本科</label
            >
            <label
              ><input
                type="radio"
                name="education"
                value="硕士研究生"
              />硕士研究生</label
            >
            <label
              ><input
                type="radio"
                name="education"
                value="博士研究生"
              />博士研究生</label
            >
            <label
              ><input type="radio" name="education" value="其他" />其他</label
            >
          </div>
        </div>
        <div class="form-group">
          <label for="region">地区:</label>
          <select id="region" name="region">
            <option value="华南">华南</option>
            <option value="华东">华东</option>
            <option value="华北">华北</option>
            <option value="西南">西南</option>
            <option value="西北">西北</option>
          </select>
        </div>
        <div class="form-group">
          <label for="email">E-mail:</label>
          <input type="email" id="email" name="email" required />
          <span class="error" id="emailError"></span>
        </div>
        <div class="form-group">
          <label for="address">地址:</label>
          <input type="text" id="address" name="address" required />
        </div>
        <div class="form-group">
          <label for="phone">电话 (数字和连字符,例如123456-123):</label>
          <input type="tel" id="phone" name="phone" required />
          <span class="error" id="phoneError"></span>
        </div>
        <div class="form-group">
          <label for="remarks">备注:</label>
          <textarea id="remarks" name="remarks" rows="4"></textarea>
        </div>
        <button type="submit">提交</button>
        <button type="reset">重置</button>
      </form>
    </div>

    <script>
      function validateForm() {
        let valid = true;

        // 清除之前的错误信息
        document
          .querySelectorAll(".error")
          .forEach((el) => (el.textContent = ""));

        // 用户ID验证
        const userId = document.getElementById("userId").value;
        if (userId.length < 6 || userId.length > 8) {
          document.getElementById("userIdError").textContent =
            "用户ID必须为6-8位";
          valid = false;
        }

        // 用户名验证
        const username = document.getElementById("username").value;
        if (username.length < 2 || username.length > 10) {
          document.getElementById("usernameError").textContent =
            "用户名必须为2-10位";
          valid = false;
        }

        // 口令验证
        const password = document.getElementById("password").value;
        if (password.length < 6 || password.length > 8 || password === userId) {
          document.getElementById("passwordError").textContent =
            "口令必须为6-8位,且不能与用户ID相同";
          valid = false;
        }

        // 确认口令验证
        const confirmPassword =
          document.getElementById("confirmPassword").value;
        if (confirmPassword !== password) {
          document.getElementById("confirmPasswordError").textContent =
            "口令不一致";
          valid = false;
        }

        // 生日格式验证
        const birthday = document.getElementById("birthday").value;
        const birthdayPattern = /^\d{4}-\d{2}-\d{2}$/;
        if (!birthdayPattern.test(birthday)) {
          document.getElementById("birthdayError").textContent =
            "生日格式不正确,必须为yyyy-mm-dd";
          valid = false;
        }

        // Email验证
        const email = document.getElementById("email").value;
        const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        if (!emailPattern.test(email)) {
          document.getElementById("emailError").textContent =
            "请输入有效的Email地址";
          valid = false;
        }

        // 电话验证
        const phone = document.getElementById("phone").value;
        const phonePattern = /^\d{6}-\d{3}$/;
        if (!phonePattern.test(phone)) {
          document.getElementById("phoneError").textContent = "电话格式不正确";
          valid = false;
        }

        // 如果所有验证通过,显示输入信息
        if (valid) {
          const formData = `
                <h2>注册信息</h2>
                <p>用户ID: ${userId}</p>
                <p>用户名: ${username}</p>
                <p>口令: ${password}</p>
                <p>生日: ${birthday}</p>
                <p>学历: ${
                  document.querySelector('input[name="education"]:checked')
                    .value
                }</p>
                <p>地区: ${document.getElementById("region").value}</p>
                <p>E-mail: ${email}</p>
                <p>地址: ${document.getElementById("address").value}</p>
                <p>电话: ${phone}</p>
                <p>备注: ${document.getElementById("remarks").value}</p>
            `;
          const newWindow = window.open("", "_blank");
          newWindow.document.write(`
                <html>
                    <head>
                        <title>注册信息</title>
                        <style>
                            body { font-family: Arial, sans-serif; }
                            h2 { color: #4CAF50; }
                        </style>
                    </head>
                    <body>
                        ${formData}
                    </body>
                </html>
            `);
          newWindow.document.close(); // 关闭文档流
        }

        return false; // 防止表单提交
      }
    </script>
  </body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI学习】Mamba学习(十三):简单了解S5模型,S5论文速读

学习了S4模型后&#xff0c;简单看一下S5模型。 来自两篇文章的摘要 苏神在文章《重温状态空间模型SSM&#xff1a;HiPPO的高效计算&#xff08;S4&#xff09;》中简单提到了S5模型&#xff1a; 由于 HiPPO 的推导是基于u(t)是一维函数进行的&#xff0c;所以到目前为止&am…

博弈论 C++

前置知识 若一个游戏满足&#xff1a; 由两名玩家交替行动在游戏进行的任意时刻&#xff0c;可以执行的合法行动与轮到哪位玩家无关不能行动的玩家判负 则称该游戏为一个公平组合游戏。 尼姆游戏&#xff08;NIM&#xff09;属于公平组合游戏&#xff0c;但常见的棋类游戏&…

揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录 &#x1f680;0.前言 &#x1f688;1.string 构造函数 &#x1f69d;1.1string构造函数 &#x1f69d;1.2string拷贝构造函数 &#x1f688;2.string类的使用 &#x1f69d;2.1.查询元素个数或空间 返回字符串中有效字符的个数&#xff1a;size lenth 返回字符串目…

micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite

micro-app 官方文档为 https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite 子应用 无需任何修改&#xff0c;直接启动子应用即可。 主应用 1. 安装微前端框架 microApp npm i micro-zoe/micro-app --save2. 导入并启用微前端框架 microApp src/main.ts …

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

为微信小程序换皮肤之配置vant

微信小程序自带的控件虽然具有很好的通用性和简洁性&#xff0c;但在面对一些复杂的交互场景和个性化的设计需求时&#xff0c;可能会显得力不从心。其功能的相对基础使得开发者在实现诸如多步骤复杂表单提交、实时数据交互与可视化展示、高度定制化的界面布局等方面&#xff0…

Navicat 安装

Navicat 安装步骤

qt 下载安装

1. 官网地址 https://www.qt.io/ 2. 下载 使用邮箱注册账号&#xff0c;登录&#xff0c;后边安装时也用的到 登录后&#xff1a; 这里需要电话号验证&#xff0c;电话号需要正确的&#xff0c;其他随便填&#xff0c;电话号中国区前需要86&#xff0c; 验证后自动下载 …

[CSP-J 2023] 一元二次方程(模拟)

变态的大模拟…… 洛谷题目传送门https://www.luogu.com.cn/problem/P9750 解题思路 主要还是模拟&#xff0c;题目让你求啥你就求啥&#xff0c;要注意细节。 然后化简根式的可以用质因数分解一下即可。 代码 #include<bits/stdc.h> using namespace std; #define …

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …

C++基础与实用技巧第三节:内存管理与性能优化

第二章&#xff1a;C基础与实用技巧 第三节&#xff1a;内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一&#xff0c;合理管理内存可以极大提高程序的性能和稳定性。在C中&#xff0c;动态内存的分配和释放通常使用new和delete运算符&am…

LeetCode_2427. 公因子的数目_java

1、题目 2427. 公因子的数目https://leetcode.cn/problems/number-of-common-factors/ 给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的一个 公因子 。 示例 1&#xff1a; 输入&#x…

基于springboot企业微信SCRM管理系统源码带本地搭建教程

系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 基…

实现prometheus+grafana的监控部署

直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…

RHCE的练习(4)

多端口访问多网站 第一步&#xff1a; 关闭防火墙&#xff08;因为要与外部连接访问&#xff09; [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0第二步&#xff1a; 创建新IP地址&#xff08;用于区分&#xff09; [rootlocalhost ~]# nmcli…

【南方科技大学】CS315 Computer Security 【Lab6 IoT Security and Wireless Exploitation】

目录 Introduction (Part 1: OS Security for IoT )Software RequirementsStarting the Lab 6 Virtual MachineSetting up the Zephyr Development EnvironmentDownload the Zephyr Source CodeInstalling Requirements and DependenciesSetting the Project’s Environment Va…

PoissonRecon学习笔记

1. Screened Poisson Reconstruction (SPR) 源码&#xff1a;https://github.com/mkazhdan/PoissonRecon However, as noted by several researchers, it suffers from a tendency to over-smooth the data. 泊松重建存在过度平滑的现象。 方法&#xff1a;position and gradi…

为Windows Terminal 配置zsh + Oh-My-Zsh!

参考&#xff1a; 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store&#xff0c;搜索 “Windows Terminal”。点击 “…

Web应用框架-Django应用基础

1. 认识Django Django是一个用Python编写的开源高级Web框架&#xff0c; 旨在快速开发可维护和可扩展的Web应用程序。 使用Django框架的开发步骤&#xff1a; 1.选择合适的版本 2.安装及配置 3.生成项目结构 4.内容开发 5.迭代、上线、维护 Django官网&#xff1a; Djang…

开源表单生成器OpnForm

什么是 OpnForm &#xff1f; OpnForm 是一个开源的表单构建工具&#xff0c;旨在简化创建自定义表单的过程&#xff0c;特别适合无编码知识的用户。它通过人工智能优化表单创建流程&#xff0c;支持多种用途&#xff0c;如联系人表单、调查表等。OpnForm 提供了一个直观的拖放…