??xml version="1.0" encoding="utf-8" standalone="yes"?>
1?|上各位兄弟提出了方法AQ删除掉原来?lt;input type="file">元素Q再马上新添加一个同名同id的file字段
<div id="a"><input type="file"></div> 像这?file字段嵌套在div里面 清空div的innerHTMLQ或清空他子节点Q?再新增innerHTMLQ或 子节点)
q种比较ȝQ必L动HTML代码 不予考虑?br />
2、直接上代码Q不废话!如下Q?
<script language="javascript">
2 if(window.HTMLElement) {
3 HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
4 var r=this.ownerDocument.createRange();
5 r.setStartBefore(this);
6 var df=r.createContextualFragment(sHTML);
7 this.parentNode.replaceChild(df,this);
8 return sHTML;
9 });
10
11 HTMLElement.prototype.__defineGetter__("outerHTML",function(){
12 var attr;
13 var attrs=this.attributes;
14 var str="<"+this.tagName.toLowerCase();
15 for(var i=0;i<attrs.length;i++){
16 attr=attrs[i];
17 if(attr.specified)
18 str+=" "+attr.name+'="'+attr.value+'"';
19 }
20 if(!this.canHaveChildren)
21 return str+">";
22 return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
23 });
24
25 HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
26 switch(this.tagName.toLowerCase()){
27 case "area":
28 case "base":
29 case "basefont":
30 case "col":
31 case "frame":
32 case "hr":
33 case "img":
34 case "br":
35 case "input":
36 case "isindex":
37 case "link":
38 case "meta":
39 case "param":
40 return false;
41 }
42 return true;
43
44 });
45}
46
47
48 function clearFile(){
49 var obj = document.getElementById("fileID");
50 obj.outerHTML = obj.outerHTML;
51 }
52 </script>
53
54<input type="file" name="fileName" id="fileID"><input type="button" value="清空" onclick="clearFile()"/>
l测试,IE 火狐 h都有效,仅作整理收藏Q如果能帮到其他人就更好了!
]]>
]]>
]]>
]]>
文中量用上所有的操作和属性,以做C
//校验d名:只能输入5-20个以字母开头、可带数字?#8220;_”?#8220;.”的字?nbsp;
//校验用户姓名Q只能输?-30个以字母开头的字串
//校验普通电话、传真号码:可以“+”开_除数字外Q可含有“-”
//校验手机LQ必M数字开_除数字外Q可含有“-”
//校验邮政~码
//校验搜烦关键?nbsp;
正则表达?/span>
正则表达式用详?/span>
?nbsp;
单的_正则表达式是一U可以用于模式匹配和替换的强有力的工兗其作用如下Q?nbsp;
试字符串的某个模式。例如,可以对一个输入字W串q行试Q看在该字符串是否存在一个电话号码模式或一个信用卡L模式。这UCؓ数据有效性验证?nbsp;
替换文本。可以在文档中用一个正则表辑ּ来标识特定文字,然后可以全部其删除Q或者替换ؓ别的文字?nbsp;
Ҏ模式匚w从字W串中提取一个子字符丌Ӏ可以用来在文本或输入字D中查找特定文字?nbsp;
基本语法
在对正则表达式的功能和作用有了初步的了解之后Q我们就来具体看一下正则表辑ּ的语法格式?nbsp;
正则表达式的形式一般如下:
/love/ 其中位于“/”定界W之间的部分是要在目标对象中q行匚w的模式。用户只要把希望查找匚w对象的模式内Ҏ?#8220;/”定界W之间即可。ؓ了能够用户更加灉|的定制模式内容,正则表达式提供了专门?#8220;元字W?#8221;。所谓元字符是指那些在正则表达式中hҎ意义的专用字W,可以用来规定其前导字W(即位于元字符前面的字W)在目标对象中的出现模式?nbsp;
较ؓ常用的元字符包括Q?nbsp;“+”Q?nbsp;“*”Q以?nbsp;“?”?/span>
“+”元字W规定其前导字符必须在目标对象中q箋出现一ơ或多次?/span>
“*”元字W规定其前导字符必须在目标对象中出现零次或连l多ơ?/span>
“?”元字W规定其前导对象必须在目标对象中q箋出现零次或一ơ?/span>
下面Q就让我们来看一下正则表辑ּ元字W的具体应用?nbsp;
/fo+/ 因ؓ上述正则表达式中包含“+”元字W,表示可以与目标对象中?nbsp;“fool”, “fo”, 或?nbsp;“football”{在字母f后面q箋出现一个或多个字母o的字W串相匹配?nbsp;
/eg*/ 因ؓ上述正则表达式中包含“*”元字W,表示可以与目标对象中?nbsp;“easy”, “ego”, 或?nbsp;“egg”{在字母e后面q箋出现零个或多个字母g的字W串相匹配?nbsp;
/Wil?/ 因ؓ上述正则表达式中包含“Q?#8221;元字W,表示可以与目标对象中?nbsp;“Win”, 或?#8220;Wilson”,{在字母i后面q箋出现零个或一个字母l的字W串相匹配?nbsp;
有时候不知道要匹配多字W。ؓ了能适应q种不确定性,正则表达式支持限定符的概c这些限定符可以指定正则表达式的一个给定组件必要出现多少ơ才能满_配?/span>
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?/span>
{n,} n 是一个非负整数。至匹?nbsp;n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?nbsp;"foooood" 中的所?nbsp;o?o{1,}' {h?nbsp;'o+'?o{0,}' 则等价于 'o*'?/span>
{n,m} m ?nbsp;n 均ؓ非负整数Q其中n <= m。最匹?nbsp;n ơ且最多匹?nbsp;m ơ。例如,"o{1,3}" 匹?nbsp;"fooooood" 中的前三?nbsp;o?o{0,1}' {h?nbsp;'o?'。请注意在逗号和两个数之间不能有空根{?/span>
除了元字W之外,用户q可以精指定模式在匚w对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字Wm可以在匹配对象中q箋出现2-6ơ,因此Q上q正则表辑ּ可以同jimmy或jimmmmmy{字W串相匹配?nbsp;
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字W的使用方式?nbsp;
使用实例
在JavaScript 1.2中带有一个功能强大的RegExp()对象Q可以用来进行正则表辑ּ的匹配操作。其中的test()Ҏ可以验目标对象中是否包含匚w模式Qƈ相应的返回true或false?nbsp;
我们可以使用JavaScript~写以下脚本Q验证用戯入的邮g地址的有效性?nbsp;
正则表达式对?/span>
本对象包含正则表辑ּ模式以及表明如何应用模式的标志?nbsp;
Pattern
必选项。要使用的正则表辑ּ模式。如果用语?nbsp;1Q用 "/" 字符分隔模式。如果用语法 2Q用引号模式引h?nbsp;
Flags
可选项。如果用语?nbsp;2 要用引号?nbsp;flag 引v来。标志可以组合用,可用的有Q?nbsp;
CZ
下面的示例创Z个包含正则表辑ּ模式及相x志的对象(re)Q向您演C正则表辑ּ对象的用法。在本例中,作ؓl果的正则表辑ּ对象又用?nbsp;match Ҏ中:
q回| ain,ain,ain,ain\\
属?nbsp;lastIndex 属?nbsp;| source 属性\\
Ҏ compile Ҏ | exec Ҏ | test Ҏ\\
要求 版本 3\\
请参?nbsp;RegExp 对象 | 正则表达式语?nbsp;| String 对象\\
exec Ҏ
用正则表辑ּ模式在字W串中运行查找,q返回包含该查找l果的一个数l?nbsp;
rgExp.exec(str)
参数
rgExp
必选项。包含正则表辑ּ模式和可用标志的正则表达式对象?nbsp;
str
必选项。要在其中执行查扄 String 对象或字W串文字?nbsp;
说明\\
如果 exec Ҏ没有扑ֈ匚wQ则它返?nbsp;null。如果它扑ֈ匚wQ则 exec Ҏq回一个数l,q且更新全局 RegExp 对象的属性,以反映匹配结果。数l的0元素包含了完整的匚wQ而第1到n元素中包含的是匹配中出现的Q意一个子匚w。这相当于没有设|全局标志 (g) ?nbsp;match Ҏ?nbsp;
如果为正则表辑ּ讄了全局标志Qexec 从以 lastIndex 的值指C的位置开始查找。如果没有设|全局标志Qexec 忽略 lastIndex 的|从字W串的v始位|开始搜索?/span>
exec Ҏq回的数l有三个属性,分别?nbsp;input、index ?nbsp;lastIndex。Input 属性包含了整个被查扄字符丌ӀIndex 属性中包含了整个被查找字符串中被匹配的子字W串的位|。LastIndex 属性中包含了匹配中最后一个字W的下一个位|?/span>
CZ\\
下面的例子D例说明了 exec Ҏ的用法:
q回|0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain
test Ҏ\\
q回一?nbsp;Boolean |它指出在被查扄字符串中是否存在模式?nbsp;
rgexp.test(str)
参数\\
rgexp
必选项。包含正则表辑ּ模式或可用标志的正则表达式对象?nbsp;
str
必选项。要在其上测试查扄字符丌Ӏ?nbsp;
说明
test Ҏ查在字符串中是否存在一个模式,如果存在则返?nbsp;trueQ否则就q回 false?nbsp;
全局 RegExp 对象的属性不?nbsp;test Ҏ来修攏V?/span>
CZ
下面的例子D例说明了 test Ҏ的用法:
函数调用Qdocument.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));
q回|'The rain in Spain falls mainly in the plain.' contains 'ain+'
match Ҏ
使用正则表达式模式对字符串执行查找,q将包含查找的结果作为数l返回。\\
stringObj.match(rgExp)
参数\\
stringObj
必选项。对其进行查扄 String 对象或字W串文字?nbsp;
rgExp
必选项。ؓ包含正则表达式模式和可用标志的正则表辑ּ对象。也可以是包含正则表辑ּ模式和可用标志的变量名或字符串文字?nbsp;
说明\\
如果 match Ҏ没有扑ֈ匚wQ返?nbsp;null。如果找到匹配返回一个数lƈ且更新全局 RegExp 对象的属性以反映匚wl果?nbsp;
match Ҏq回的数l有三个属性:input、index ?nbsp;lastIndex。Input 属性包含整个的被查扑֭W串。Index 属性包含了在整个被查找字符串中匚w的子字符串的位置。LastIndex 属性包含了最后一ơ匹配中最后一个字W的下一个位|?nbsp;
如果没有讄全局标志 (g)Q数l的 0 元素包含整个匚wQ而第 1 ?nbsp;n 元素包含了匹配中曑և现过的Q一个子匚w。这相当于没有设|全局标志?nbsp;exec Ҏ。如果设|了全局标志Q元?nbsp;0 ?nbsp;n 中包含所有匹配?/span>
CZ\\
下面的示例演CZmatch Ҏ的用法:
本示例说明带 g 标志讄?nbsp;match Ҏ的用法?nbsp;
上面几行代码演示了字W串文字?nbsp;match Ҏ的用法?nbsp;
search Ҏ
q回与正则表辑ּ查找内容匚w的第一个子字符串的位置?/span>
stringObj.search(rgExp)
参数\\
stringObj
必选项。要在其上进行查扄 String 对象或字W串文字?nbsp;
rgExp
必选项。包含正则表辑ּ模式和可用标志的正则表达式对象?nbsp;
说明
search Ҏ指明是否存在相应的匹配。如果找C个匹配,search Ҏ返回一个整数|指明q个匚w距离字符串开始的偏移位置。如果没有找到匹配,则返?nbsp;-1?/span>
CZ\\
下面的示例演CZ search Ҏ的用法?nbsp;
正则表达式语?/span>
一个正则表辑ּ是由普通字W(例如字符 a ?nbsp;zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?/span>
q里有一些可能会遇到的正则表辑ּCZQ?nbsp;
下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:
字符 描述
\ 下一个字W标Cؓ一个特D字W、或一个原义字W、或一?nbsp;后向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?nbsp;'\\' 匚w "\" ?nbsp;"\(" 则匹?nbsp;"("?nbsp;
^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象?nbsp;Multiline 属性,^ 也匹?nbsp;'\n' ?nbsp;'\r' 之后的位|?nbsp;
$ 匚w输入字符串的l束位置。如果设|了RegExp 对象?nbsp;Multiline 属性,$ 也匹?nbsp;'\n' ?nbsp;'\r' 之前的位|?nbsp;
* 匚w前面的子表达式零ơ或多次。例如,zo* 能匹?nbsp;"z" 以及 "zoo"?nbsp;* {h于{0,}?nbsp;
+ 匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?nbsp;"zo" 以及 "zoo"Q但不能匚w "z"? {h?nbsp;{1,}?nbsp;
? 匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?nbsp;"does" 中的"do" ? {h?nbsp;{0,1}?nbsp;
{n} n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?nbsp;
{n,} n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?nbsp;"foooood" 中的所?nbsp;o?o{1,}' {h?nbsp;'o+'?o{0,}' 则等价于 'o*'?nbsp;
{n,m} m ?nbsp;n 均ؓ非负整数Q其中n <= m。最匹?nbsp;n ơ且最多匹?nbsp;m ơ。刘Q?nbsp;"o{1,3}" 匹?nbsp;"fooooood" 中的前三?nbsp;o?o{0,1}' {h?nbsp;'o?'。请注意在逗号和两个数之间不能有空根{?nbsp;
? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?nbsp;"oooo"Q?o+?' 匹配单?nbsp;"o"Q?nbsp;'o+' 匹配所?nbsp;'o'?nbsp;
. 匚w?nbsp;"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?nbsp;
(pattern) 匚wpattern q获取这一匚w。所获取的匹配可以从产生?nbsp;Matches 集合得到Q在VBScript 中?nbsp;SubMatches 集合Q在JScript 中则使用 $0…$9 属性。要匚w圆括号字W,请?nbsp;'\(' ?nbsp;'\)'?nbsp;
(?:pattern) 匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?nbsp;"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?nbsp;
(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹?nbsp;"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?nbsp;
(?!pattern) 负向预查Q在M不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?nbsp;"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?nbsp;
x|y 匚w x ?nbsp;y。例如,'z|food' 能匹?nbsp;"z" ?nbsp;"food"?(z|f)ood' 则匹?nbsp;"zood" ?nbsp;"food"?nbsp;
[xyz] 字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?nbsp;
[^xyz] 负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?nbsp;
[a-z] 字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?nbsp;'z' 范围内的L写字母字符?nbsp;
[^a-z] 负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?nbsp;'z' 范围内的L字符?nbsp;
\b 匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?nbsp;
\B 匚w非单词边界?er\B' 能匹?nbsp;"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?nbsp;
\cx 匚w由x指明的控制字W。例如, \cM 匚w一?nbsp;Control-M 或回车符?nbsp;x 的值必Mؓ A-Z ?nbsp;a-z 之一。否则,?nbsp;c 视ؓ一个原义的 'c' 字符?nbsp;
\d 匚w一个数字字W。等价于 [0-9]?nbsp;
\D 匚w一个非数字字符。等价于 [^0-9]?nbsp;
\f 匚w一个换늬。等价于 \x0c ?nbsp;\cL?nbsp;
\n 匚w一个换行符。等价于 \x0a ?nbsp;\cJ?nbsp;
\r 匚w一个回车符。等价于 \x0d ?nbsp;\cM?nbsp;
\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?nbsp;
\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?nbsp;
\t 匚w一个制表符。等价于 \x09 ?nbsp;\cI?nbsp;
\v 匚w一个垂直制表符。等价于 \x0b ?nbsp;\cK?nbsp;
\w 匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?nbsp;
\W 匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?nbsp;
\xn 匚w nQ其?nbsp;n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如, '\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?nbsp;ASCII ~码?
\num 匚w numQ其?nbsp;num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋的相同字W?nbsp;
\n 标识一个八q制转义值或一个后向引用。如?nbsp;\n 之前臛_ n 个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?nbsp;
\nm 标识一个八q制转义值或一个后向引用。如?nbsp;\nm 之前臛_有is preceded by at least nm 个获取得子表辑ּQ则 nm 为后向引用。如?nbsp;\nm 之前臛_?nbsp;n 个获取,?nbsp;n Z个后跟文?nbsp;m 的后向引用。如果前面的条g都不满Q若 n ?nbsp;m 均ؓ八进制数?nbsp;(0-7)Q则 \nm 匹配八q制转义?nbsp;nm?nbsp;
\nml 如果 n 为八q制数字 (0-3)Q且 m ?nbsp;l 均ؓ八进制数?nbsp;(0-7)Q则匚w八进制{义?nbsp;nml?nbsp;
\un 匚w nQ其?nbsp;n 是一个用四个十六q制数字表示?nbsp;Unicode 字符。例如, \u00A9 匚w版权W号 (?)?nbsp;
优先权顺?/span>
在构造正则表辑ּ之后Q就可以象数学表辑ּ一h求|也就是说Q可以从左至叛_ƈ按照一个优先权序来求倹{?nbsp;
下表从最高优先到最低优先列出各种正则表达式操作符的优先权序Q?nbsp;
普通字W?/span>
普通字W由所有那些未昑ּ指定为元字符的打印和非打印字W组成。这包括所有的大写和小写字母字W,所有数字,所有标点符号以及一些符受?nbsp;
最单的正则表达式是一个单独的普通字W,可以匚w所搜烦字符串中的该字符本n。例如,单字W模?nbsp;'A' 可以匚w所搜烦字符串中M位置出现的字?nbsp;'A'。这里有一些单字符正则表达式模式的CZQ?nbsp;
/a7M/
{h?nbsp;VBScript 表达式ؓQ?/span>
"a7M"
h意这里没有连接操作符。所需要做的就是将一个字W放在了另一个字W后面?/span>
<link href="prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="prettify.js"></script>
onload="prettyPrint()"
to your document's body tag.
Put code snippets in <pre class="prettyprint">...</pre> or <code class="prettyprint">...</code> and it will automatically be pretty printed.
The original | Prettier |
---|---|
class Voila { public: // Voila static const string VOILA = "Voila"; // will not interfere with embedded tags. } |
class Voila { |
The comments in prettify.js are authoritative but the lexer should work on a number of languages including C and friends, Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk and a decent subset of Perl, but, because of commenting conventions, doesn't work on Smalltalk, or CAML-like languages.
LISPy languages are supported via an extension: lang-lisp.js
.
And similarly for LUA
, OCAML, SML, F#
, SQL
, and Protocol Buffers
.
If you'd like to add an extension for your favorite language, please look at lang-lisp.js and file an issue including your language extension, and a testcase.
You don't need to specify the language since prettyprint()
will guess. You can specify a language by specifying the language extension along with the prettyprint
class like so:
<pre class="prettyprint lang-html">
The lang-* class specifies the language file extensions.
Supported file extensions include
"c", "cc", "cpp", "cs", "cyc", "java", "bsh", "csh", "sh",
"cv", "py", "perl", "pl", "pm", "rb", "js",
"html", "html", "xhtml", "xml", "xsl".
</pre>
Yes. Prettifying obfuscated code is like putting lipstick on a pig ?i.e. outside the scope of this tool.
It's been tested with IE 6, Firefox 1.5 & 2, and Safari 2.0.4. Look at the test page to see if it works in your browser.
See the change log
Apparently wordpress does "smart quoting" which changes close quotes. This causes end quotes to not match up with open quotes.
This breaks prettifying as well as copying and pasting of code samples. See for info on how to stop smart quoting of code snippets.
You can use the nocode
class to identify a span of markup that is not code.
<pre class=prettyprint> <span class="nocode">1:</span> /* This is line 1 of my code <span class="nocode">2:</span> * and here's line 2 */ <span class="nocode">3:</span> print("I'm line number 3"); </pre>produces
1: /* This is line 1 of my code
2: * and here's line 2 */
3: print("I'm line number 3");
For a more complete example see the issue22 testcase.