Mootools 1.2教程 输入过滤第二部分(字符串)


Posted in Javascript onSeptember 15, 2009

我们会在以后另外用一讲来将一下正则表达式的基本知识和在MooTools下的使用。
在开始之前,我想先花一点时间来看一下字符串函数是怎么调用的。在我的例子中,我是在字符串变量上面直接调用这个方法的,就像下面的这样:
参考代码:

var my_text_variable = "Heres some text"; 
// 结果 字符串变量 方法名 
var result_of_function = my_text_variable.someStringFunction();

但是我这样写只是为了能够更清楚地解释它,你应该了解到这些字符串函数也可以直接在字符串上调用,而不需要声明一个变量,就像这样:
参考代码:
var result_of_function = "Heres some text".someStringFunction();

注意一下,这个方式在MooTools中的数字处理函数也同样有效:
参考代码:
// 注意一下用法,是括号中的数字 
// 而不是单引号引起来的字符串 
var limited_number = (256).limit(1, 100);

还有,我想再次强调一遍:用JavaScript对输入过滤并不能在数据发送到服务器之前对其进行安全过滤。你在JavaScript中写的所有的一切都可以被你的网页浏览者看到、操控和禁止。我们将在以后讲MooTools的Request类时,对PHP的过滤技术进行一些简单的探讨。同时,继续保持原来要在服务器端做的任何与安全相关的事情,不要依赖JavaScript。
trim()
trim函数提供了一个简单直接的方式来去掉任何你想处理的字符串两端的空白字符。
参考代码:
// 这是我们要trim的字符串 
var text_to_trim = " \nString With Whitespace "; 
// trim后的字符串是"String With Whitespace" 
var trimmed_text = text_to_trim.trim();

如果你还没有见过\n,其实这只是一个换行符而已。你可以在一个字符串中使用它来把字符串分割成多行。trim方法把换行符也当作一个空白符,因此它也会把换行符去掉。trim方法唯一不做的一件特别的事情就是:它并不会去掉一个字符串里面的任何多余的空白字符。下面的这个例子展示了trim是怎样处理字符串里面的换行符的:
参考代码:
var trimDemo = function(){ 
// 设置我们要修剪的字符串 
var text_to_trim = ' \ntoo much whitespace\n '; 
// 对其进行修剪 
var trimmed_text = text_to_trim.trim(); 
// 显示结果 
alert('Before Trimming : \n' + 
'|-' + text_to_trim + '-|\n\n' + 
'After Trimming : \n' + 
'|-' + trimmed_text + '-|'); 
}

clean()
为了更有意义,你也许不需要去掉一个字符串里的所有空白符。幸运的是,对于那些你觉得坚强的空白字符,MooTools慷慨地为你提供了clean()方法。
参考代码:

// 这是我们要修剪的字符串 
var text_to_clean = " \nString \nWith Lots \n \n More \nWhitespace \n "; 
// clean以后的字符串是"String With Lots More Whitespace" 
var cleaned_text = text_to_trim.clean();

clean()方法与trim()方法有一点很大的不同。它把你传入的字符里面的空格全部提取出来,而不只是头部和尾部的空白字符。它们意味着字符串中的任何多于一个的空白字符和任何换行符和制表符(tab)。对比一下修剪的结果,我们看看到底是什么意思:
参考代码:
var cleanDemo = function(){ 
// 设置我们要修剪的字符串 
var text_to_clean = ' too\n much\n whitespace '; 
// clean该字符串 
var cleaned_text = text_to_clean.clean(); 
// 显示结果 
alert('Before Cleaning : \n' + 
'|-' + text_to_clean + '-|\n\n' + 
'After Cleaning : \n' + 
'|-' + cleaned_text + '-|'); 
}

contains()
和trim()以及clean()方法类似,contains()方法做一件很简单的事情,没有任何其他的花架子。它检查一个字符串去看它是否包含一个你要查找的字符串,如果找到了要查找的字符串就返回true,如果没有找到就返回false。
参考代码:

// 我们要在这个字符串里面查找 
var string_to_match = "Does this contain thing work?"; 
// 找'contain', did_string match为true 
var did_string_match = string_to_match.contains('contain'); 
// 找'propane', did_string_match为 false 
did_string_match = string_to_match.contains('propane');

这个方法可以在各种情况下派上用场,当你和其他工具,如我们在第三讲中讲到的Array.each()函数配合使用时,你可以用相对较少的代码来完成一些稍微复杂的任务。举个例子,如果我们把一系列单词放进一个数组,然后一个一个地遍历,我们可以用较少的代码在一个文本的相同区域中寻找多个单词:
参考代码:
string_to_match = "string containing whatever words you want to try to match"; 
word_array = ['words', 'to', 'match']; 
// 把数组中的每一个单词作为变量传进去 
word_array.each(function(word_to_match){ 
// 寻找当前的单词 
if (string_to_match.contains(word_to_match)){ 
alert('found ' + word_to_match); 
}; 
});

我们把它放进一个textbox中,加一点想象,你就可以拥有你自己的脏词(或者其他任何)检测器。
参考代码:
var containsDemo = function(){ 
// 把我们要禁止的词放进一个数组 
var banned_words = ['drat', 'goshdarn', 'fiddlesticks', 'kumquat']; 
// 获得文本域中的内容 
var textarea_input = $('textarea_1').get('value'); 
// 枚举过滤词中的每一个词 
banned_words.each(function(banned_word){ 
// 在文本域内容中查找当前的过滤词 
if (textarea_input.contains(banned_word)){ 
// 告诉用户不能使用那个单词 
alert(banned_word + ' is not allowed'); 
}; 
}); 
}

substitute()
substitute()是一个非常强大的工具。我们今天只是讲一下一些关于它的基本知识,substitute的更多强大的功能来自于它的正则表达式的使用,我们会在后面稍微讲一下。然而,仅仅使用这些基本功能你就可以做很多事情了。
参考代码:

// 这是要使用substitute方法的文本模板 
// 注意,要替代的部分都是用花括号括起来的部分 
var text_for_substitute = "One is {one}, Two {two}, Three is {three}."; 
// 这个对象包含了要替换的规则 
// 没有用引号引起来的部分是搜索项 
// 用引号引起来的部分是用来替换搜索项的句子 
var substitution_object = { 
one : 'the first variable', 
two : 'always comes second', 
three : 'getting sick of bronze..' 
}; 
// 在text_for_substitute上调用substitute方法 
// 把substitution_object作为参数传入 
// 把替换结果赋值给变量new_string 
var new_string = text_for_substitute.substitute(substitution_object); 
// new_string现在的值为"One is the first variable, Two always comes second, Three is getting sick of bronze..."

事实上你并不需要创建一个substitution_object对象来使用substitute方法,如果你觉得它不合适的话,下面的方法也同样可以实现:
参考代码:
// 建立要替换的字符串 
var text_for_substitute = "{substitute_key} and the original text"; 
// 把要替换的对象作为参数传给substitute方法 
var result_text = text_for_substitute.substitute({substitute_key : 'substitute_value'}); 
// result_text现在就是"substitute_value and the original text"

你可以通过这个方法做得更多更深入一点,你可以用从一个DOM对象中获得值的函数调用来作为替换项的值,这也是可以的。
参考代码:
var substituteDemo = function(){ 
// 从textfield中获得原始的 文本 
var original_text = $('substitute_span').get('html'); 
// 用文本框中的值替换textfield中的值 
var new_text = original_text.substitute({ 
first : $('first_value').get('value'), 
second : $('second_value').get('value'), 
third : $('third_value').get('value'), 
}); 
// 用新的文本替换span中的内容 
$('substitute_span').set('html', new_text); 
// 禁用substitute按钮 
// 并启用reset按钮 
$('simple_substitute').set('disabled', true); 
$('simple_sub_reset').set('disabled', false); 
} 
var substituteReset = function(){ 
// 创建一个变量来保存原有的文本 
var original_text = "|- {first} -- {second} -- {third} -|"; 
// 用原有的文本来替换span中的内容 
$('substitute_span').set('html', original_text); 
// 禁用reset按钮 
// 并启用substitute 
$('simple_sub_reset').set('disabled', true); 
$('simple_substitute').set('disabled', false); 
}

|- {first} -- {second} -- {third} -|
first_value
second_value
third_value
在今天结束之前,有一个很小的提示,如果你在一个字符串上调用substitute方法,并且不为要替换的关键字提供一个键/值对(key/value pair)对象,那么它将只是简单地删除掉花括号里面的内容。因此,如果你需要保留花括号里面的字符串,请注意不要使用这个方法。举个例子,如下:
参考代码:
("{one} some stuff {two} some more stuff").substitute({one : 'substitution text'});

这将返回“substitution text some stuff some more stuff”。

更多学习

下载一个包含你开始所需要的zip包

  • String上的怪异模式(this guy is amazing)
  • JavaScript字符串函数参考
  • MooTools字符串文档
Javascript 相关文章推荐
jquery 输入框数字限制插件
Nov 10 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
Mar 18 Javascript
Table冻结表头示例代码
Aug 20 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
轮播的简单实现方法
Jul 28 Javascript
微信小程序教程系列之新建页面(4)
Apr 17 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
关于Vue在ie10下空白页的debug小结
May 02 Javascript
js模拟实现烟花特效
Mar 10 Javascript
vue+springboot+element+vue-resource实现文件上传教程
Oct 21 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 #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
You might like
第六节 访问属性和方法 [6]
2006/10/09 PHP
PHP默认安装产生系统漏洞
2006/10/09 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
代码生成器 document.write()
2007/04/15 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
javascript 精粹笔记
2010/05/09 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
javascript回到顶部特效
2016/07/30 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
python操作列表的函数使用代码详解
2017/12/28 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python中join()方法介绍
2018/10/11 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
想学画画?python满足你!
2020/12/24 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
爱国卫生月实施方案
2014/02/21 职场文书
公司合作协议书范本
2014/04/18 职场文书
英文演讲稿开场白
2014/08/25 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
安全隐患整改报告
2014/11/06 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
员工试用期工作总结
2019/06/20 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
python单元测试之pytest的使用
2021/06/07 Python