1.需求

  修改某个文本框数据,要求对修改后的格式做验证(必须是数字)。

  注:实际需求比上述复杂,为了说明问题,这里特意简化了需求(如:对修改后数据依赖条件的判断,数据入库等)。

2.关于NaN的探讨(失败经历)

  针对以上需求,我构建了文本框,并为这个文本添加了点击事件。

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>博客园js正则表达式</title>
</head>
<body>
<input id="my_input" onclick="rec();">
</body>
</html>

HTML

  点击事件主要内容是弹出一个prompt 消息对话框,在对话框中进行数据的修改。

function rec(){
var new_input; //用来存储用户更改的新数据
new_input = prompt("请输入新的数据","80"); if(new_input == null){
return;
} //数据被更改 }

JS代码

  因为input取出来的值为String类型,所以必须转换成为Number类型。对转换之后的数据做判断就可以了。

  首先考虑数据格式是否合法。如果转换成Number之后是NaN,就提示「数据不合法」。注意:第一个大坑就从这里开始了:无论如何,都不会跳入 Number(new_input) == NaN 的子句。

  在控制台中试了一下,竟然发现: NaN == NaN 返回了false!

  

  好吧,原来所有的问题都集中在这个知识点上。所以关于「转换数据后与NaN进行比较」的思路宣告失败!

3.使用正则表达式(正确思路)

  「转换数据后与NaN进行比较」宣布此路不通之后,就换了『匹配正则表达式』这个思路。这个思路肯定是可行的,但在使用的过程中要注意一些细节。

  学习「js正则表达式」详细内容可以参考这个系列(系列上   系列下)。

  细节一:js正则表达式一定要有开始和结束符号

    没有/^ $/,解释器不会认为这是正则表达式。这点和Java不同(Java中不用开始结束标记也是可以的)。

  细节二:js正则表达式不需要加上引号(" "或' ')

    完整写法如下:/^[1-9][0-9]+$/   。

  细节三:使用何种匹配方法

    js正则表达式有自己的构造方法,但我们的需求比较简单,完全不用专门构造一个正则对象。

    接下来的问题就是我们该选择哪种匹配方法(详见 系列下)。

    根据用法说明,我们要返回布尔值,因此可以明确要使用 test()  方法。即:

      /^[1-9][0-9]+$/.test(new_input)

    还要说一句:虽然正则表达式和被匹配的字符串都是字符型,但顺序不能颠倒。

4.总结

  (1)任意两个NaN不相等。

  (2)js正则表达式应该有开始和结束标记,且不需要加引号(" "或'')。

  (3)严格按照匹配方法进行匹配。

    

JavaScript数据格式验证探讨的更多相关文章

  1. 关于去除Eclipse对JavaScript的验证

    关于去除Eclipse对JavaScript的验证 在我们使用大量JavaScript作为一些UI或其他组件来使用时,很多情况下,明明引用的这些JavaScript是可以正常使用的,但Eclipse却 ...

  2. JavaScript 数据验证类

    JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...

  3. javascript数字验证输入

    javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...

  4. javascript实现验证身份证号的有效性并提示

    javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...

  5. JavaScript:验证输入

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. JavaScript正则验证邮箱

    正则表达式/^正则$/.test() <html> <head> <title>JavaScript</title> <meta charset= ...

  7. javascript form验证、完善 第24节

    <html> <head> <title>Form对象</title> <style type="text/css"> ...

  8. java 数据格式验证类

    作为一个前端,懂一点java,php之类的,甚好. 我所在的项目前端采用的就是java的spring mvc框架,所以我们也写java,掐指一算,也快一年了. 前端而言,验证是一个坎,绕不过去的,前面 ...

  9. 如何跳过前端JavaScript的验证

    绕开前端的JS验证通常有以下的方法: 方法一: 将页面保存到自己机器上,然后把脚本检查的地方去掉,最后在自己机器上运行那个页面就可以了 方法二: 该方式与方法一类似一样,只是将引入js的语句删掉,或则 ...

随机推荐

  1. Spark Streaming之四:Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年,成为Spark平台上流式处理的解决方案,同时也给大家提供除Storm 以外的另一个选择.这篇内容主要介绍Spark Streaming 数据接收 ...

  2. Paint Tree

    题意: 给定一棵n个点的树,给定平面上n个点,将n个点用线段连起来画成树的形状,使得不存在不在端点相交的线段,构造出一种情况. 解法: 首先观察我们常规画出来的树形图可知,树的子树是根据极角分开的,这 ...

  3. Bootstrap 自适应排列顺序

    一.前用 我们在做一些页面的设计时,总会想到自适应的问题.其实 Bootstrap 框架就很好的融合这个问题了.下面是我学习 Bootstrap 的总结. 二.问题来源 我为什么会遇见这个问题,是因为 ...

  4. MySQL基础知识(一)-超详细MySQL安装教程

    简介 原计划,今天这篇想要给小伙伴们讲解一下python操作mysql数据库,但是由于近期换了一台新的电脑,所以一看mysql数据库都没安装,所有才有了这篇文章.尽管网上不乏此类型的文章,但是刚好自己 ...

  5. E20181012-hm

    expiration  n. 呼气; 截止; 满期;

  6. PhpStorm之操作数据库

    对数据库进行基本的操作 还不清楚如何使用PhpStorm连接本地数据库的朋友看一下我的上一篇博客配置数据库连接 点击已经连接好的数据库,找到下图中的 Consoles,然后点击 console(def ...

  7. CF954I Yet Another String Matching Problem(FFT+并查集)

    给定两个字符串\(S,T\) 求\(S\)所有长度为\(|T|\)子串与\(T\)的距离 两个等长的串的距离定义为最少的,将某一个字符全部视作另外一个字符的次数. \(|T|<=|S|<= ...

  8. Linux下安装ruby

    使用apt-get安装 sudo apt-get install ruby 这个命令下载的,有可能是旧的版本,所以还是推荐下面的方式. 下载tar.gz安装 去官方网站下载最新的tar.gz文件 su ...

  9. linux tcpdump(转)

    转自 http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 默认启动 tcpdump 普通情况下,直接启动tcpdump将监 ...

  10. [题解](最短路)luogu_P5122 Fine Dining

    首先理解这里的美味值相当于给你更多时间让你经过这个草垛的, 也就是在经过草垛时可以给你的时间减少w[i],这样能否比最短路不慢 然而我们并不容易知道怎么走才是最好的,所以要想办法避免找这个方案 我们新 ...