Mootools 1.2教程 输入过滤第一部分(数字)


Posted in Javascript onSeptember 15, 2009

注意:JavaScript中的输入过滤只是为了保证(客户端)代码顺利执行,并不能替代服务器端的字符串过滤来保护你的应用程序不被注入攻击。
在第四讲的最后的一个例子中,我们从文本输入框获取RGB值,然后使用它们来改变页面背景色,今天我们首先来看看那个例子的部分代码,并以此展开我们这一讲。
rgbToHex()
从技术上讲,rgbToHex()方法实际上是属于Array集合的。由于它是一个来处理数字的数组方法,我们今天来学习一下这个方法。从功能上来讲,rgbToHex()使用起
来很简单:
参考代码:

function changeColor(red_value, green_value, blue_value){ 
var color = [red_value, green_value, blue_value].rgbToHex(); 
alert('Converts to : ' + color); 
}

这很正常很完美,因为红色、绿色和蓝色的值都是数字。试试,如果当你传入了一些其他意外的东西:
在这个结果的最后你看到了一个“NaN”,NaN代表不是一个数字(
Not a Number)。如果你把颜色的值作为硬编码写在代码里面,这种情况可能不会出现。但是如果你是从一个输入表单获得的这
个值,那么你很可能会碰到这样的情况,你需要去处理这样一些不符合要求的输入值。
toInt()
因此,现在我们需要一种方式确保传给rgbToHex()方法的参数都是数字——这里就需要使用toInt()方法了。toInt()是另一个相对简单的函数。你可以在一个变量上调用它,那么它将尽可能地将它转换成一个整数。
参考代码:
var toIntDemo = function(make_me_a_number){ 
var number = make_me_a_number.toInt(); 
alert ('Best Attempt : ' + number); 
}

正如你说看到的,toInt()方法并不能处理所有你可以想到的情况,不过幸亏有了MooTools里面另外一个很酷的方法叫做$type(),我们也可以很好地处理那个问题。
$type()
$type()是另外一个来自MooTools的令人不可思议的简单和有用的东西。它可以检查你传入的无论什么变量,然后返回一个字符串,告诉你这个变量是什么类型:
参考代码:
var checkType = function(variable_to_check){ 
var variable_type = $type(variable_to_check); 
alert("Variable is a : " + variable_type); 
}

那里还有许多$type()方法可以检测的类型——你可以在这个
Core.$type()文档中找到一个完整的列表。不过现在,我们真正关心的是怎么检测整数。如果我们在
toIntDemo()方法中使用$type()方法,那么我们就可以很容易地处理那些toInt()不能处理的输入了:
参考代码:
var toIntDemo = function(make_me_a_number){ 
//Try to make the input number 
var number = make_me_a_number.toInt(); 
//If That didn't work, set number to 0 
if ($type(number) != 'number'){number = 0;} 
alert('Best Attempt : ' + number); 
}

当我们把它们和changeColor()方法组合起来,我们就可以得到一个几乎接近完美的解决方案了:
参考代码:
var changeColor_2 = function(red_value, green_value, blue_value){ 
//Try to make sure everything is an integer 
red_value = red_value.toInt(); 
green_value = green_value.toInt(); 
blue_value = blue_value.toInt(); 
//Set default values on anything thats Not a Number 
if ($type(red_value) != 'number'){red_value = 0;} 
if ($type(green_value) != 'number'){green_value = 0;} 
if ($type(blue_value) != 'number'){blue_value = 0;} 
//Calculate hex value 
var color = [red_value, green_value, blue_value].rgbToHex(); 
alert('Converts to : ' + color); 
}

最后一个方法中传给rgbToHex()方法的数字超过了RGB允许值0-255的范围,这个值还是被忠实地转换成了它的十六进制值。不幸的是,这意味着我们接受了一个超过那个范围的数字,我们将不能得到一个有效的十六进 制颜色值。幸运的是,MooTools中哎呦另外一个方法,我们可以用来处理这个问题。
limit()
MooTools中的limit()方法也是非常简单直接的。你可以在一个数字上面调用这个方法,传入一个这个数字允许的最小值和一个允许的最大值作为参
数,它会自动地进行舍入处理。你还需要牢记这一点:limit方法需要传入整数参数,因此一般在使用limit方法之前先对你要指定为数字的东西(或者其他在数字集合(
Number Collection)里面的东西)使用toInt()方法。
参考代码:
var limitDemo = function(number_to_limit){ 
//Do our best to get an integer 
number_to_limit = number_to_limit.toInt(); 
//Get the limited value 
var limited_number = number_to_limit.limit(0, 255); 
alert("Number Limited To : " + limited_number); 
}

示例代码
把上面的方法和我们刚才的changeColor()方法混合起来试试:
参考代码:
var changeColor = function(red_value, green_value, blue_value){ 
//Try to make sure everything is an integer 
red_value = red_value.toInt(); 
green_value = green_value.toInt(); 
blue_value = blue_value.toInt(); 
//Set default values on anything thats Not a Number 
if ($type(red_value) != 'number'){red_value = 0;} 
if ($type(green_value) != 'number'){green_value = 0;} 
if ($type(blue_value) != 'number'){blue_value = 0;} 
//Limit Everything to the RGB Scale (0 - 255) 
red_value = red_value.limit(0, 255); 
green_value = green_value.limit(0, 255); 
blue_value = blue_value.limit(0, 255); 
//Calculate hex value 
var color = [red_value, green_value, blue_value].rgbToHex(); 
alert('Converts to : ' + color); 
}

更多学习

下载一个包含你开始所需要的全部东西的zip包

  • 标准的数字(Number)处理功能函数
  • Mootools的数字(Number)处理功能函数
  • Mootools的数组(Array)处理功能函数
Javascript 相关文章推荐
跟随鼠标旋转的文字
Nov 30 Javascript
js异或加解密效果代码
Jun 25 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
Mar 05 Javascript
JS获取屏幕高度的简单实现代码
May 24 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
jQury Ajax使用Token验证身份实例代码
Sep 22 Javascript
深入理解Vuex 模块化(module)
Sep 26 Javascript
微信小程序实现左右列表联动
May 19 Javascript
react写一个select组件的实现代码
Apr 03 Javascript
微信小程序上传图片到php服务器的方法
May 23 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
Mootools 1.2教程 设置和获取样式表属性
Sep 15 #Javascript
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 #Javascript
Mootools 1.2教程 事件处理
Sep 15 #Javascript
Mootools 1.2教程 函数
Sep 15 #Javascript
Mootools 1.2教程(3) 数组使用简介
Sep 14 #Javascript
Mootools 1.2教程(2) DOM选择器
Sep 14 #Javascript
MooTools 1.2介绍
Sep 14 #Javascript
You might like
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
php面向对象重点知识分享
2019/09/27 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python下Fabric的简单部署方法
2015/07/14 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Python的Lambda函数用法详解
2019/09/03 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
python绘制分布折线图的示例
2020/09/24 Python
党员违纪检讨书
2014/02/18 职场文书
农村文化活动总结
2014/08/28 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle