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 相关文章推荐
javascript for循环设法提高性能
Feb 24 Javascript
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
Aug 15 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
jQuery 中$(this).index与$.each的使用指南
Nov 20 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
实例详解带参数的 npm script
May 28 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
在vue中使用防抖函数组件操作
2020/07/26 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
python3之微信文章爬虫实例讲解
2017/07/12 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
应届生服装设计自我评价
2013/09/20 职场文书
幼师专业毕业生自荐信
2013/09/29 职场文书
一名女生的自荐信
2013/12/08 职场文书
作风年建设汇报材料
2014/08/14 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
授权委托书公证
2014/09/14 职场文书
自主招生专家推荐信
2015/03/26 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers