JavaScript数据格式验证探讨
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数据格式验证探讨的更多相关文章
- 关于去除Eclipse对JavaScript的验证
关于去除Eclipse对JavaScript的验证 在我们使用大量JavaScript作为一些UI或其他组件来使用时,很多情况下,明明引用的这些JavaScript是可以正常使用的,但Eclipse却 ...
- JavaScript 数据验证类
JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...
- javascript数字验证输入
javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...
- javascript实现验证身份证号的有效性并提示
javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...
- JavaScript:验证输入
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- JavaScript正则验证邮箱
正则表达式/^正则$/.test() <html> <head> <title>JavaScript</title> <meta charset= ...
- javascript form验证、完善 第24节
<html> <head> <title>Form对象</title> <style type="text/css"> ...
- java 数据格式验证类
作为一个前端,懂一点java,php之类的,甚好. 我所在的项目前端采用的就是java的spring mvc框架,所以我们也写java,掐指一算,也快一年了. 前端而言,验证是一个坎,绕不过去的,前面 ...
- 如何跳过前端JavaScript的验证
绕开前端的JS验证通常有以下的方法: 方法一: 将页面保存到自己机器上,然后把脚本检查的地方去掉,最后在自己机器上运行那个页面就可以了 方法二: 该方式与方法一类似一样,只是将引入js的语句删掉,或则 ...
随机推荐
- Python2.7 urlparse学习
urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse等. urlpa ...
- wannafly test D
题意: 给定n,m求满足: 1.a[i][j]互不相同,且有$1<=a[i][j]<=n*m$ 2.对于$a[i1][j1],a[i2][j2]$,如果有 $i1 \oplus j1 &g ...
- 性能测试之Jmeter学习(一)
一.Jmeter的安装: 1.安装配置要求: Java版本: Jmeter要求完全兼容的Java6或更高版本(建议安装java 8或以上版本): 操作系统:是一个100%的Java程序,它在任何支持完 ...
- ElasticSearch基础+文档CRUD操作
本篇博客是上一篇的延续,主要用来将年前学习ES的知识点做一个回顾,方便日后进行复习和汇总!因为近期项目中使用ES出现了点小问题,因此在这里做一个详细的汇总! [01]全文检索和Lucene (1)全文 ...
- java8--List转为Map、分组、过滤、求和等操作
利用java8新特性,可以用简洁高效的代码来实现一些数据处理~ 定义1个Apple对象: public class Apple { private Integer id; private String ...
- 计算机图形学DDA画线法+中点画线法+Bresenham画线法
#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...
- art-template在项目中的应用
art-template 是一个简约.超快的模板引擎.它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器. 下面介绍在 ...
- CF1076D Edge Deletion
洛谷传送门 cf传送门 这道题作为div.2的D题,被我一眼秒了我觉得十分荣幸,然后就开始写,然后就写了好久. AC之后看网上的题解,发现好多最短路树的,猛然发现我写的好复杂啊,结果还看到了直接一遍d ...
- iOS 更改状态栏、导航栏颜色的几种方法
ios上状态栏 就是指的最上面的20像素高的部分状态栏分前后两部分,要分清这两个概念,后面会用到: 前景部分:就是指的显示电池.时间等部分:背景部分:就是显示黑色或者图片的背景部分: (一)设置sta ...
- CSS 两边是线 中间是文字的效果
刚开始做的时候 想了一下 这个是怎么做出来的,后来在网上看到有个类似的效果,研究一下 <!DOCTYPE html> <html lang="en"> &l ...