转自:http://blog.csdn.net/you23hai45/article/details/21120119
JavaScript过滤特殊字符
1、设计实例
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>JavaScript过滤特殊字符</title>
- <style type="text/css">
- body{
- width:80%;
- background-color:#FFC;
- height:100px;
- font-size:14px;
- font-family:"Times New Roman", Times, serif;
- font-stretch:expanded;
- font-style:inherit;
- font-variant:inherit;
- font-weight:bold;
- }
- #div1{
- text-align:center;
- width:100%;
- height:100%;
- line-height:inherit;
- }
- #btn{
- font:Georgia, "Times New Roman", Times, serif;
- font-size-adjust:inherit;
- font-weight:bold;
- background-color:#C96;
- alignment-adjust:after-edge;
- alignment-baseline:baseline;
- word-break:break-all;
- width:120px;
- height:30px;
- font-size:16px;
- animation:ease;
- }
- </style>
- <script type="text/javascript">
- /**
- * 过滤字符串函数
- **/
- function filterStr(str)
- {
- var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%+_]");
- var specialStr = "";
- for(var i=0;i<str.length;i++)
- {
- specialStr += str.substr(i, 1).replace(pattern, '');
- }
- return specialStr;
- }
- /**
- * 检测过滤字符串函数
- **/
- function checkStr()
- {
- var str = document.getElementById("pContent").innerHTML;
- alert("过滤之前的字符串:" + str);
- str = filterStr(str);
- alert("过滤之后的字符串:" + str);
- }
- </script>
- </head>
- <body>
- <div id="div1">
- <p id="pContent">张三huhnjhj$%$^%^%&^*&<>?{}{{[]()_+|@~`$378748hyfgtyt35451fdhjdsh&%^^&$#%%&^^*&(*%$%$f4857485</p>
- <input type="button" id="btn" name="btn" value="过滤" onclick="checkStr()"/>
- </div>
- </body>
- </html>
2、设计结果
(1)初始化时
(2)单击“过滤”按钮
(3)单击“确定”按钮后
3、说明
JavaScript利用正则表达式过滤特殊字符,关键之处是正则表达式的正确性和完整性,保证常见特殊字符都可以过滤掉。
但是,这个正则表达式有一个弊端,不能过滤掉“\”特殊字符。
自定义:
在chrome浏览器中可以进行js正则表达式的简单测试:
匹配数字:
(/^([0-9]+)$/.test("123"))
匹配非数字:
(/^([^\d]+)$/.test("123"))
非数字非*号
(/^([^\d\*]+)$/.test("123abc*"))
false
(/^([^\d\*]+)$/.test("abc*"))
false
(/^([^\d\*]+)$/.test("abc"))
true
不能是以下特殊符号:
[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%+_]
(/^([^\~\!\@\#\^\&\*\(\)\=\|\{\}\'\:\;\"\,\\\.\/]+)$/.test("abc"))
(/^([^\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\"\,\\\[\]\.\<\>\/\?\~\!\@\#\¥\……\&\*\(\)\——\|\{\}\【\】\‘\;\:\”\“\'\。\,\、\?\%\+\_]+)$/.test("abc"))
true
s1 = "abc\"test\""
"abc"test""
s1
"abc"test""
(/^([^\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\"\,\\\[\]\.\<\>\/\?\~\!\@\#\¥\……\&\*\(\)\——\|\{\}\【\】\‘\;\:\”\“\'\。\,\、\?\%\+\_]+)$/.test(s1))
false
上述特殊符号中允许使用\.\_\-
(/^([^\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\"\,\\\[\]\<\>\/\?\~\!\@\#\¥\……\&\*\(\)\——\|\{\}\【\】\‘\;\:\”\“\'\。\,\、\?\%\+]+)$/.test(s1))