js计算器(正则)

2023-05-16


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>我的计算器</title>
<style>
*{margin:0px; padding:0px;}
#jsq{
    width:300px;
    height:330px;
    background:#CCC;
    margin:0 auto;
    margin-top:10%;
}

#showv{width:298px;height:50px;display:block; font-size:16px; line-height:50px;}
input{width:56px; height:56px;margin-top:10px;}
</style>
<script type="text/javascript" src="CalcEval.js"></script>
</head>

<body>

<div id="jsq">
    <input type='text' id="showv"/>
    
    <input type="button" value="7" onClick="jsq(this.value);" />
     <input type="button" value="8" onClick="jsq(this.value);"/>
      <input type="button" value="9" onClick="jsq(this.value);"/>
      <input type="button" value="back" onClick="tuige();"/>
      <input type="button" value="C"  onClick="qingling();"/>
      
      
      
       <input type="button" value="4" onClick="jsq(this.value);"/>
     <input type="button" value="5" onClick="jsq(this.value);"/>
      <input type="button" value="6" onClick="jsq(this.value);"/>
      <input type="button" value="*" onClick="jsq(this.value);"/>
      <input type="button" value="/" onClick="jsq(this.value);"/>
      
      
          <input type="button" value="1" onClick="jsq(this.value);"/>
     <input type="button" value="2" onClick="jsq(this.value);"/>
      <input type="button" value="3" onClick="jsq(this.value);"/>
      <input type="button" value="+" onClick="jsq(this.value);"/>
      <input type="button" value="-" onClick="jsq(this.value);"/>
      
         <input type="button" value="0" onClick="jsq(this.value);"/>
     <input type="button" value="00" onClick="jsq(this.value);"/>
      <input type="button" value="." onClick="jsq(this.value);"/>
      <input type="button" value="%" onClick="jsq(this.value);"/>
      <input type="button" value="=" onClick="dengyu();"/>
</div>


<script>
    var cal = new CalcEval();
    var showv=document.getElementById('showv');
    showv.focus();

    function jsq(v){        
        a=showv.value.substr(-1,1);
        zz1=/^[0-9]$/;
        //重复运算符
        if(!zz1.test(a)&&!zz1.test(v)){
            console.log('请输入正确格式');
            return false;    
        }
        str=showv.value+v;
        
        var zz2=/^[0]+/;
        //多个0
        if(zz2.test(str)){
            str=str.replace(zz2,0);
        }
        //运算符之后的多个0
        var zz3=/[+\-*\/%]{1}[0]{2}/;
        if(zz3.test(str)){
            str=str.substr(0,str.length-1);    
        }
        
        //开始多个点0.0.0.01
        var zz4=/^[0-9]+\.[0-9]+\.{1,}/;
        if(zz4.test(str)){
            str=str.substr(0,str.length-1);    
        }
        //运算符之后多给点
        var zz5=/[+\-*\/%][0-9]+\.[0-9]+\.{1,}/;
        if(zz5.test(str)){
            str=str.substr(0,str.length-1);    
        }
        //开始为0
        var zz6=/^[0]{1}[0-9]{1,}/;
        if(zz6.test(str)){
            str=str.substr(1,str.length-1);
        }
        //运算符之后为0开始
        var zz7=/[+\-*\/%][0]{1}[0-9]{1,}/;
        if(zz7.test(str)){
            str=str.substr(0,str.length-2)+str.substr(-1,1);
        }
        
        
        
        
        showv.value=str;
    }
    
    function dengyu(){
        var zz=/^[+\-*\/%\.]+$/;
        var a=showv.value.substr(-1,1);
        if(zz.test(a)){//最后输入的是运算符
            showv.value=showv.value.substr(0,showv.value.length-1);
        }
        
        showv.value=cal.eval(showv.value);
        showv.focus();
    }
    
    function qingling(){
        showv.value="";
        showv.focus();
    }
    
    function tuige(){
        showv.value=showv.value.substr(0,showv.value.length-1);
        showv.focus();
    }

        //键盘输入   步骤同上
    document.onkeyup=function key(a){
        var str = showv.value;
        var zz = /[^+\-*\/%\.0-9]{1,}/;
        str = str.replace(zz,"");    
        
        var zz2 = /[+\-*\/%\.][+\-*\/%\.]{1,}/;
        var arr = str.match(zz2);
        if(arr!=null){
            str = str.replace(zz2,arr[0].substr(0,1));    
        }
        
        var zz3 = /^[0][0]{1,}/;
        str = str.replace(zz3,0);
        
        var zz4 = /[+\-*\/%][0][0]{1,}/;
        var arr4 = str.match(zz4);
        if(arr4!=null){
            str = str.replace(zz4,arr4[0].substr(0,2));    
        }
        
        var zz5 = /[0-9]+\.[0-9]+\.{1,}/;
        var arr5 = str.match(zz5);
        if(arr5!=null){
            str = str.replace(zz5,arr5[0].substr(0,arr5[0].length-1));    
        }
        
        var zz6 = /[0][1-9]{1,}/;
        var arr6 = str.match(zz6);
        if(arr6!=null){
            str = str.replace(zz6,arr6[0].substr(1,arr6[0].length));    
        }
    
        showv.value = str;
        if(a.keyCode==13){
            dengyu();    
        }
    }
</script>
</body>
</html>  

 

转载于:https://www.cnblogs.com/liu-heng/p/6860978.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js计算器(正则) 的相关文章

  • CentOS7 查看操作系统版本信息

    CentOS 查看操作系统版本信息 1 使用cat proc version uname 查看内核版本 root 64 CentOS7 cat proc version Linux version 3 10 0 957 el7 x86 64
  • wincc7.4安装授权 全(文件分享)

    链接 xff1a https pan baidu com s 1YJwbvetH1gFElu468TWuAQ 提取码 xff1a 6ood 转载于 https www cnblogs com hefengweiliang p 1113633
  • Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activa...

    Unable to resolve service for type 39 Microsoft Extensions Logging ILogger 39 while attempting to activate 39 xxxxx Cont
  • python的两种运行方式

    python有两种运行方式 xff0c 第一种是交互式 xff0c 另一种是脚本式 xff0c 这里可能郁闷了 xff0c 啥叫脚本 xff1f xff1f 脚本可能会想到不重要的 xff0c 边角料啥的 xff0c 我们可以认为是一个大型
  • C++ new用法相关经验总结

    C 43 43 编程语言中有一种叫做new的术语 不过这一概念是比较模糊的 xff0c 有些人把它理解为new函数 xff0c 但是有的人又会把它理解为new运算符 那么它的真正含义又是如何的呢 xff1f 在这里我们将会通过对C 43 4
  • JWT签名算法

    JWT签名算法 JWT签名算法中 xff0c 一般有两个选择 xff0c 一个采用HS256 另外一个就是采用RS256 签名实际上是一个加密的过程 xff0c 生成一段标识 xff08 也是JWT的一部分 xff09 作为接收方验证信息是
  • vs环境Microsoft Build Tools 生成工具

    最近开发 xff0c 生成项目时 xff0c 开始生成不成功 xff0c 提示复制dll没有权限 xff0c 访问拒绝 经过搜索与尝试 xff0c 终于找到原因 xff0c 原来Microsoft Build Tools出错了 xff0c
  • ARM debian的图形界面安装

    这里图形界面的安装比较简单 xff0c 启动系统后 xff0c 登录到root账户 xff0c 首先要执行更新源的命令 xff1a apt get update 然后直接执行下面的动作 xff1a 直接安装LXDE即可 xff1a 指令 x
  • 接口自动化测试 (三)request.post

    上一节介绍了 requests get 方法的基本使用 xff0c 本节介绍 requests post 方法的使用 xff1a 本文目录 xff1a 一 方法定义 二 post方法简单使用 1 带数据的post 2 带header的pos
  • MongoDB—副本集配置、管理

    副本集配置 副本集配置总是以一个文档的形式保存在local system replSet集合中 副本集中所有成员的这个文档都是相同的 绝对不要使用update更新这个文档 xff0c 应该使用rs辅助函数或者replSetReconfig命
  • 二进制、八进制和十六进制

    二进制 用0 1两个数字来表示数值 xff0c 这就是二进制 xff08 Binary xff09 对于二进制 xff0c 进行加法运算时逢二进一 xff0c 进行减法运算时借一当二 1 二进制加法 xff1a 1 43 0 61 1 1
  • 获取文件的行数

    获取文件行数 function getFileLineCount fileName fp 61 fopen fileName 34 r 34 line 61 0 while feof fp 每次读取1M if data 61 fread f
  • debian 安装使用NTP

    编程之路刚刚开始 xff0c 错误难免 xff0c 希望大家能够指出 领导要求 xff0c 要4台机器时钟同步 xff0c 上网查了查 xff0c 主要看了看ptp和ntp xff0c 感觉ntp就够用 xff0c 索性就直接上手ntp了
  • iTOP-4418开发板和6818开发板-第五路串口介绍

    iTOP 4418开发板和6818开发板 的除去默认 4 个串口的配置和用法 4418 的开发板最多支持 5 路串口 xff0c 如下图所示 xff0c 4418 的 datasheet 6818 的开发板最多支持 6 路串口 xff0c
  • 如何让sublime编译c语言,让sublime支持c/c++语言的编译

    sublime只是一个编辑器 xff0c 让sublime支持c或者c 43 43 则是通过设定sublime快捷键调用相关的命令 xff0c 达到编辑和执行c代码的目的 首先需要下载一个c语言的编译器 xff0c 对于 Windows 和
  • mysql repos_mysql yum源安装

    部署服务器环境的时候经常要安装mysql 以下是常见的安装方式 源码安装 rpm包安装 yum源安装 这篇主要介绍yum源安装 yum源下载 进入https dev mysql com downloads 页面 xff0c 可以看到有很多的
  • you-get帮助使用手册

    you get使用手册 可选参数 V version 查看版本并退出 h help 查看帮助信息 不影响使用的选项 i info 查看页面视频信息 u url 查看页面视频信息包括解析的url地址 json 以json格式查看页面视频信息
  • openSUSE leap 42.3 实现有线 无线同时用

    因为工作的原因 xff0c 经常会用有线网卡连接服务器进行配置 xff0c 无线网卡上外网 一 查看当前网关信息 pipci 64 openSUSE gt ip route show 可以看到前两行default开头的就是默认网关 192
  • PHP连接mongodb的现代用法---使用Monogodb\Driver\Manager

    目的 xff1a 在php程序端查询文档相关集合存储情况 lt php Created by PhpStorm User Administrator Date 2018 11 29 Time 2 23 require 34 mongocon
  • CTreeListCtrl

    CTreeListCtrl 转载于 https www cnblogs com long80226 archive 2009 10 13 1582770 html

随机推荐

  • MongoDB——副本集成员配置

    选举仲裁者 仲裁者的唯一作用就是参与选举 仲裁者并不保存数据 xff0c 也不会为客户端提供服务 xff1a 它只是为了帮助具有两个成员的副本集能够满足 大多数 这个条件 由于仲裁者并不需要履行传统mongod服务器的责任 xff0c 所以
  • qemu 虚拟机和宿主机之间传输文件

    实现简单的虚拟机和宿主机之间的文件传输 使用dd创建一个文件 xff0c 作为虚拟机和宿主机之间传输桥梁 dd if 61 dev zero of 61 opt share img bs 61 1M count 61 200格式化share
  • 解决远程桌面连接过去后是蓝色屏幕问题

    其实此时的远程服务器并非不能正常工作了 并不需要重启 只是桌面不显示了 服务还在正常运行 解决方法 1 使用ctrl 43 shift 43 Esc键 调出远程桌面的任务管理器 2 点击任务管理器工具栏的 文件 新建任务 运行 在运行窗口选
  • ssl 服务器证书,客户端信任证书

    Secure Socket Layer SSL technology allows web browsers and web servers to communicate over a secure connection In this s
  • Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多 xff0c 所以选择了Laravel admin后台框架进行开发 节省了权限控制以及页面处理等问题的时间 Laravel admin文档地址 http laravel admin org docs zh 由于项
  • linux分区btrfs,系统基础之Btrfs文件系统详解

    btrfs文件系统 技术预览版 centos7 描述 Btrfs B tree Butter FS Better fs GPL授权 Orale 2007 写实复制特性 Cow cp reflink 只能在btrfs文件系统中使用 想取代ex
  • UITableView 总结

    UITableView 1 重用代理 64 interface ViewController UIViewController lt UITableViewDelegate UITableViewDataSource gt 2 定义 tab
  • 【转】ASP.Net2.0 AJAX Extensions 1.0的安装

    文章出处 xff1a DIY部落 http www diybl com course 4 webprogram asp net asp netshl 2008828 138230 html 以前一直没有去应用ajax xff0c 这2天用了
  • pip国内源

    pip 国内源 xff1a 清华 xff1a https pypi tuna tsinghua edu cn simple 阿里云 xff1a http mirrors aliyun com pypi simple 中国科技大学 https
  • 视频教程-C语言入门篇-C/C++

    C语言入门篇 23年C 43 43 语言编程经验 xff0c 经历过多个行业的开发项目包括网络安全 xff0c 网络游戏 xff0c 通信行业等等 xff0c 多年的摸爬滚打使自身具备了深厚的开发实力和实战经验 王健伟 98 00 立即订阅
  • ubuntu - 如何以root身份使用图形界面管理文件?

    nautilus 是gnome的文件管理器 xff0c 但是如果不是root账号下 xff0c 权限受限 xff0c 我们可以通过以下方式以root权限使用 xff01 一 xff0c 快捷键 ctrl 43 alt 43 t 调出shel
  • debian添加删除用户

    debian添加删除用户 增加普通用户 命令 xff1a adduser abc passwd abc exit 用abc登录 etc passwd中保存了用户信息 LINUX创建用户的命令 useradd g test d home te
  • MongoDB——副本集的同步、选举和回滚

    1 同步 复制用于在多台服务器之间备份数据 MongoDB的复制功能是使用操作日志oplog实现的 xff0c 操作日志包含了主节点的每一次写操作 oplog是主节点的locl数据库中的一个固定集合 备份节点通过查询这个集合就可以知道需要进
  • ftp (文件传输协议)

    ftp xff08 文件传输协议 xff09 锁定 本词条由 科普中国 百科科学词条编写与应用工作项目 审核 FTP 是File Transfer Protocol xff08 文件传输协议 xff09 的英文简称 xff0c 而中文简称为
  • SQL Server 中的 JSON 数据

    下面是 JSON 文本的示例 34 name 34 34 John 34 34 skills 34 34 SQL 34 34 C 34 34 Azure 34 34 name 34 34 Jane 34 34 surname 34 34 D
  • 去除地址栏带#的问题

    vue cil搭建的项目 第一步 xff1a 找到目录下router js文件 第二步 xff1a 在new Router xff08 routes xff1a xff09 中添加mode属性 xff0c 默认mode是hash expor
  • 如何给自己的Python项目制作安装包

    Packaging Python Projects 本教程将指导您如何打包一个简单的Python项目 它将向您展示如何添加必要的文件和结构来创建包 xff0c 如何构建包以及如何将其上载到Python包索引 A simple project
  • linux安装解压工具gzip,笔记6 压缩工具(gzip,bzip2,xz,zip,tar)。

    压缩打包 常见的压缩文件 windows rar zip 7z Linux zip gz bz2 xz tar gz tar bz2 tar xz gzip压缩工具 不能压缩目录 gzip压缩后边直接跟文件名就可以 xff0c gunzip
  • 洛谷 P3367 【模板】并查集

    P3367 模板 并查集 题目描述 如题 xff0c 现在有一个并查集 xff0c 你需要完成合并和查询操作 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示共有N个元素和M个操作 接下来M行 xff0c 每行
  • js计算器(正则)

    lt doctype html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt 我的计算器 lt title gt lt style gt mar