今天我们来看一看mootools给我们提供的额外的一些处理字符函数。这只是mootools字符串处理中的一部分,并不包含一些神秘的函数(比如tocamelcase())和使用正则表达式处理字符串的函数。我们会在以后另外用一讲来将一下正则表达式的基本知识和在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函数提供了一个简单直接的方式来去掉任何你想处理的字符串两端的空白字符。
参考代码: [复制代码] [保存代码]
- var text_to_trim = " /nstring 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 ";
- var cleaned_text = text_to_trim.clean();
clean()方法与trim()方法有一点很大的不同。它把你传入的字符里面的空格全部提取出来,而不只是头部和尾部的空白字符。它们意味着字符串中的任何多于一个的空白字符和任何换行符和制表符(tab)。对比一下修剪的结果,我们看看到底是什么意思:
参考代码: [复制代码] [保存代码]
- var cleandemo = function(){
-
- var text_to_clean = ' too/n much/n whitespace ';
-
-
- 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?";
-
- var did_string_match = string_to_match.contains('contain');
-
- 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的更多强大的功能来自于它的正则表达式的使用,我们会在后面稍微讲一下。然而,仅仅使用这些基本功能你就可以做很多事情了。
参考代码: [复制代码] [保存代码]
- 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..'
- };
-
- var new_string = text_for_substitute.substitute(substitution_object);
-
事实上你并不需要创建一个substitution_object对象来使用substitute方法,如果你觉得它不合适的话,下面的方法也同样可以实现:
参考代码: [复制代码] [保存代码]
- var text_for_substitute = "{substitute_key} and the original text";
- var result_text = text_for_substitute.substitute({substitute_key : 'substitute_value'});
你可以通过这个方法做得更多更深入一点,你可以用从一个dom对象中获得值的函数调用来作为替换项的值,这也是可以的。
参考代码: [复制代码] [保存代码]
- var substitutedemo = function(){
-
- var original_text = $('substitute_span').get('html');
-
-
- var new_text = original_text.substitute({
- first : $('first_value').get('value'),
- second : $('second_value').get('value'),
- third : $('third_value').get('value'),
- });
-
-
- $('substitute_span').set('html', new_text);
-
-
-
-
- $('simple_substitute').set('disabled', true);
- $('simple_sub_reset').set('disabled', false);
- }
-
- var substitutereset = function(){
-
- var original_text = "|- {first} -- {second} -- {third} -|";
-
-
- $('substitute_span').set('html', original_text);
-
-
-
- $('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字符串文档