存档

文章标签 ‘javascript’

JavaScript的系统函数学习

2008年1月5日 編程·程序設計 595 views

1.编码处理函数
1) encodeURI
返回一个对URI字符串编码后的结果。URL是最常见的一种URI;
2) decodeURI
将一个已编码的URI字符串解码成最原始的字符串返回;
3) 举例:

eg.

< Script language = " javascript " >    
  
<!–    
  
var encodeStr = encodeURI( " http://www.amigoxie.com/index.jsp?name=阿蜜果 " );   
  
alert( " encodeStr: " + encodeStr);   
  
var decodeStr = decodeURI(encodeStr);   
  
alert( " decodeStr: " + decodeStr);   
  
// –>    
  
</ script >  

输出结果:

encodeStr: http://www.amigoxie.com/index.jsp?name=%E9%98%BF%E8%9C%9C%E6%9E%9C   
decodeStr: http://www.amigoxie.com/index.jsp?name=阿蜜果  

2. 数值处理函数
1) parseInt
将一个字符串指定的进制转换为一个整数,语法格式为:
parseInt(numString, [radix])
第一个参数是要进行转换的字符串,是介于2到36之间的数值,用于指定进行字符串转换时所用的进制。

JavaScript代码

<Script language="javascript">   
  
<!–   
  
//下面是同一个数用不同进制表示时在默认情况下的举例   
  
document.write("默认情况下的结果:");   
  
document.write("32:"+parseInt(‘32′));   
  
document.write(";032:"+parseInt(‘032′));   
  
document.write(";0×32:"+parseInt(‘0×32′)+"<br>");   
  
//下面是同一个数用不同进制表示时在转为2进制的举例   
  
document.write("转为2进制的结果:");   
  
document.write("32:"+parseInt(‘32′,2));   
  
document.write(";032:"+parseInt(‘032′,2));   
  
document.write(";0×32:"+parseInt(‘0×32′,2)+"<br>");   
  
//下面是同一个数用不同进制表示时在转为8进制的举例   
  
document.write("转为8进制的结果:");   
  
document.write("32:"+parseInt(‘32′,8));   
  
document.write(";032:"+parseInt(‘032′,8));   
  
document.write(";0×32:"+parseInt(‘0×32′,8)+"<br>");   
  
//下面是同一个数用不同进制表示时在转为16进制的举例   
  
document.write("转为16进制的结果:");   
  
document.write("32:"+parseInt(‘32′,16));   
  
document.write(";032:"+parseInt(‘032′,16));   
  
document.write(";0×32:"+parseInt(‘0×32′,16)+"<p>");   
  
//下面是对一个2进制数转换为不同进制的举例   
  
document.write("11001010转换后的结果: "+"<br>");   
  
document.write("2进制:"+parseInt(‘11001010′,2));   
  
document.write(";16进制:"+parseInt(‘11001010′,16)+"<br>");   
  
document.write("8进制:"+parseInt(‘11001010′,8));   
  
document.write(";10进制:"+parseInt(‘11001010′,10));   
  
//下面是对不全是数字情况下转换的举例   
  
document.write("<p>43abc转换后:"+parseInt(‘43abc’));   
  
document.write(";abc43转换后:"+parseInt(‘abc43′));   
  
document.write(";abc转换后:"+parseInt(‘abc’));   
  
//–>   
  
</script>  

 

输出结果:

默认情况下的结果:32:32;032:26;0×32:50   
  
转为2进制的结果:32:NaN;032:0;0×32:0   
  
转为8进制的结果:32:26;032:26;0×32:0   
  
转为16进制的结果:32:50;032:50;0×32:50    
  
11001010转换后的结果:    
  
2进制:202;16进制:285216784   
  
8进制:2359816;10进制:11001010    
  
43abc转换后:43;abc43转换后:NaN;abc转换后:NaN   

2) [...]

, ,

用JavaScript验证密码强度

2008年1月5日 編程·程序設計 721 views

规则如下:
四种组合指 数字,小写字母,大写字母,其它字符
把密码强度分为四等:

1. 密码长度小于或等于四位.或者密码只有一种组合
2. 密码长度大于四位, 且有两种组合.
3. 密码长度大于四位, 且有三种组合.
4. 密码长度大于四位, 且有四种组合.
如果没有输入则返回0
判断函数: 其实函数主体只有一句,只利用了一个正则.之间却应用了好几个技巧.
首先,这个正则会得到五个捕获组.
前四个捕获组会告诉我们这个字符串包含有多少种组合(返回多少个匹配代表多少种组合)
如果这个字符串小于5位的话,则会得到第五个捕获组,长度为1(即强度为1),如果没有输入,就连捕获组5都不会得到.强度为0
里面其它地方的小技巧理解起来应该也不会很难的.相信仔细阅读会理解
下面是一个应用实例

JavaScript代码

<script language="JavaScript">   
var test = new Array("", "a1_", "abcdef", "abcde123", "ads23%", "aA1B2^&2");   
for(var i in test)   
{   
    alert(test[i] + " 的密码强度为" + Evaluate(test[i]));   
}   
function Evaluate(word)   
{   
    return word.replace(/^(?:([a-z])|([A-Z])|([0-9])|(.)){5,}|(.)+$/g, "$1$2$3$4$5").length;   
}   
</script>  

 
来源:http://www.cnblogs.com/0009/archive/2007/04/24/725568.html

JavaScript代码

<script language="JavaScript">   
function Evaluate(word)   
{   
    return word.replace(/^(?:([a-z])|([A-Z])|([0-9])|(.)){5,}|(.)+$/g, "$1$2$3$4$5").length;   
}   
</script>  

, , , ,

Javascript正则表达式简介(五)

2007年11月29日 編程·程序設計 580 views

选择与编组
选择允许使用 ‘|’ 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表达式,可以将其扩充为不仅仅适用于章节标题的表达式。不过,这可没有想象的那么直接。在使用选择时,将匹配’|’ 字符每边最可能的表达式。你可能认为下面的 JScript 和 VBScript 表达式将匹配位于一行的开始和结束位置且后跟一个或两个数字的 ‘Chapter’ 或 ‘Section’:

JavaScript代码

/^Chapter|Section [1-9][0-9]{0,1}$/   
"^Chapter|Section [1-9][0-9]{0,1}$"  

不幸的是,真正的情况是上面所示的正则表达式要么匹配位于一行开始处的单词 ‘Chapter’,要么匹配一行结束处的后跟任何数字的 ‘Section’。如果输入字符串为 ‘Chapter 22′,上面的表达式将只匹配单词 ‘Chapter’。如果输入字符串为 ‘Section 22′,则该表达式将匹配 ‘Section 22′。但这种结果不是我们此处的目的,因此必须有一种办法来使正则表达式对于所要做的更易于响应,而且确实也有这种方法。
可以使用圆括号来限制选择的范围,也就是说明确该选择只适用于这两个单词 ‘Chapter’ 和 ‘Section’。不过,圆括号同样也是难处理的,因为它们也用来创建子表达式,有些内容将在后面关于子表达式的部分介绍。通过采用上面所示的正则表达式并在适当位置添加圆括号,就可以使该正则表达式既可以匹配 ‘Chapter 1′,也可以匹配 ‘Section 3′。
下面的正则表达式使用圆括号将 ‘Chapter’ 和 ‘Section’ 组成一组,所以该表达式才能正确工作。对 JScript 为:

JavaScript代码

/^(Chapter|Section) [1-9][0-9]{0,1}$/  

对 VBScript 为:

ASP/Visual Basic代码

"^(Chapter|Section) [1-9][0-9]{0,1}$"  

这些表达式工作正确,只是产生了一个有趣的副产品。在 ‘Chapter|Section’ 两边放置圆括号建立了适当的编组,但也导致两个待匹配单词之一都被捕获供今后使用。由于在上面所示的表达式中只有一组圆括号,因此只能有一个捕获的 submatch。可以使用 VBScript 的Submatches 集合或者JScript 中RegExp 对象的 $1-$9 属性来引用这个子匹配。
有时捕获一个子匹配是所希望的,有时则是不希望的。在说明所示的示例中,真正想做的就是使用圆括号对单词 ‘Chapter’ 或 ‘Section’ 之间的选择编组。并不希望在后面再引用该匹配。实际上,除非真的是需要捕获子匹配,否则请不要使用。由于不需要花时间和内存来存储那些子匹配,这种正则表达式的效率将更高。
可以在正则表达式模式圆括号内部的前面使用 ‘?:’来防止存储该匹配供今后使用。对上面所示正则表达式的下述修改提供了免除子匹配存储的相同功能。对 JScript:

JavaScript代码

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/  

对 VBScript:

ASP/Visual Basic代码

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"  

除了 [...]

,

Javascript正则表达式简介(四)

2007年11月29日 編程·程序設計 632 views

限定符
有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
下表给出了各种限定符及其含义的说明:

字符
描述

*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。

+
匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

?
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

{n}
n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 "Bob" 中的 ‘o’,但是能匹配 "food" 中的两个 o。

{n,}
n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 "Bob" 中的 ‘o’,但能匹配 "foooood" 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" [...]

,

Javascript正则表达式简介(三)

2007年11月29日 編程·程序設計 629 views

字符匹配
句点 (.) 匹配一个字符串中任何单个的打印或非打印字符,除了换行符 (\n) 之外。下面的 JScript 正则表达式可以匹配 ‘aac’、’abc’、’acc’、’adc’如此等等,同样也可以匹配 ‘a1c’、’a2c’、a-c’以及 a#c’:

JavaScript代码

/a.c/  

等价的 VBScript 正则表达式为:

ASP/Visual Basic代码

"a.c"  

如果试图匹配一个包含文件名的字符串,其中句点 (.) 是输入字符串的一部分,则可以在正则表达式中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。举例来说,下面的 JScript 正则表达式就能匹配 ‘filename.ext’:

JavaScript代码

/filename\.ext/  

对 VBScript 而言,等价的表达式如下所示:

ASP/Visual Basic代码

"filename\.ext"  

这些表达式仍然是相当有限的。它们只允许匹配任何单字符。很多情况下,对从列表中匹配特殊字符十分有用。例如,如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题,你可能需要找到这些章节标题。
括号表达式
可以在一个方括号 ([ 和 ]) 中放入一个或多个单字符,来创建一个待匹配的列表。如果字符被放入括号中括起来,则该列表称为括号表达式。括号内和其他任何地方一样,普通字符代表其本身,也就是说,它们匹配输入文字中出现的一处自己。大多数特殊字符在位于括号表达式中时都将失去其含义。这里有一些例外:

‘]’ 字符如果不是第一项,则将结束一个列表。要在列表中匹配 ‘]’ 字符,请将其放在第一项,紧跟在开始的 ‘[' 后面。
'\' 仍然作为转义符。要匹配 '\' 字符,请使用 '\\'。

括号表达式中所包含的字符只匹配该括号表达式在正则表达式中所处位置的一个单字符。下面的 JScript 正则表达式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5':

JavaScript代码

/Chapter [12345]/  

在 VBScript 中要匹配同样的章节标题,请使用下面的表达式:

ASP/Visual Basic代码

"Chapter [12345]"  

请注意单词 ‘Chapter’ 及后面的空格与括号内的字符的位置关系是固定的。因此,括号表达式只用来指定满足紧跟在单词 ‘Chapter’ [...]

,

Javascript正则表达式简介(二)

2007年11月29日 編程·程序設計 586 views

建立正则表达式
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。
可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。对 JScript 而言,分隔符为一对正斜杠 (/) 字符。例如:

JavaScript代码

/expression/  

对 VBScript 而言,则采用一对引号 ("") 来确定正则表达式的边界。例如:

ASP/Visual Basic代码

"expression"  

在上面所示的两个示例中,正则表达式模式 (expression) 均存储在RegExp 对象的Pattern 属性中。
正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
优先权顺序
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。
下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:

操作符
描述

\
转义符

(), (?:), (?=), []
圆括号和方括号

*, +, ?, {n}, {n,}, {n,m}
限定符

^, $, \anymetacharacter
位置和顺序

|
“或”操作

普通字符
普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。
最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 ‘A’ 可以匹配所搜索字符串中任何位置出现的字母 ‘A’。这里有一些单字符正则表达式模式的示例:

JavaScript代码

/a/   
/7/   
/M/  

等价的 VBScript 单字符正则表达式为:

ASP/Visual Basic代码

"a"  
"7"  
"M"  

可以将多个单字符组合在一起得到一个较大的表达式。例如,下面的 JScript 正则表达式不是别的,就是通过组合单字符表达式 ‘a’、’7′以及 ‘M’ 所创建出来的一个表达式。

Java代码

/a7M/  

等价的 VBScript 表达式为:

ASP/Visual Basic代码

"a7M"  

请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。
特殊字符
有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符,必须首先将这些字符转义,也就是在前面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义:

特殊字符
说明

$
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。

( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( [...]

,

Javascript正则表达式简介(一)

2007年11月29日 編程·程序設計 511 views

正则表达式
如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。
请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 ‘data?.dat’ 的模式可以找到下述文件:
data1.dat
data2.dat
datax.dat
dataN.dat
如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。’data*.dat’ 可以匹配下述所有文件名:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。
早期起源
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
使用正则表达式
在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。
使用正则表达式,就可以:

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。
另一个说明正则表达式非常有用的示例是一种其字符串处理能力还不为人所知的语言。VBScript 是 Visual Basic 的一个子集,具有丰富的字符串处理功能。与 C 类似的 Jscript 则没有这一能力。正则表达式给 JScript 的字符串处理能力带来了明显改善。不过,可能还是在 VBScript [...]

,