嗯,可以得,把变量的作用域由window用with改成对象就行了。
替换的时候,正则表达式捕获的分组也是会传递给替换函数得。
var data={a:"这个属性的值"};var ss="sssdfdf{{a}}sss{{1==2 a : '错误的值' }}sss";
var result=ssreplace(/\{\{()\}\}/g,function(find, group1){
with(data){
return eval(group1);
}
});
consolelog(result);
注意这个要求字符串内的表达式符合js语法要求,‘错误的值’的引号要用半角的。
这两者区别挺多的:相同点是都是程序语言中的函数
不同的地方有很所,同一个函数在不同语言中含义大同小异。
拿Eval函数说下:
①Eval函数在JavaScript可将字符串转换为代码执行,并返回一个或多个值
var d = eval("({name:'chentong'})")
alert(dname);
②Eval函数在VBScript脚本语言中的使用: 在VB脚本语言中,Eval函数具有两层意思,一是实现计算表达的值,即eval()函数可将字符串转换为代码执行,并返回一个或多个值;二是运行指定的代码。
③Eval函数在PHP代码中的使用:eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
Eval函数也就主要运用在这三种编程语言中,就不一一举例了。。。
Exec()是JavaScript 的一种方法,也算一种函数,并且很复杂。
Exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
① JavaScript exec() 方法用于检索字符串中的正则表达式的匹配。
RegExpObjectexec(string)
②返回值
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
在这里把这两种作为比较那就是说的是两种函数在JavaScript中的区别:
1、同属于JavaScript 的方法 eval() 、 exec()
2、返回值
返回值 = eval( codeString ) 返回一个或多个值。
exec():返回一个数组,其中存放匹配的结果
如果未找到匹配,则返回值为 null。
1、如果手动转的话,用replace()函数将字符替换成对应的字符。
2、js中有一个专门的转16进制的编码函数:encodeURI()
网址URL中特殊字符转义编码
字符 - URL编码值
空格 - %20
" - %22
# - %23
% - %25
& - %26
( - %28
) - %29
+ - %2B
, - %2C
/ - %2F
: - %3A
; - %3B
< - %3C
= - %3D
> - %3E
- %3F
@ - %40
\ - %5C
| - %7C
URL特殊字符转义
URL中一些字符的特殊含义,基本编码规则如下:
1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号()分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数
如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值
+ %2B
/ %2F
%3F
% %25
# %23
& %26
由于在项目中经常要用AJAX传SQL给后台服务端
会遇到select num+1 from dual或者左右连接形式。总会丢掉(+)
这个时候可以尝试用一下URL特殊字符转义
用JS的encodeURI()函数或者直接改成相对应的十六进制的值
看网上介绍encodeURI函数也是讲URI转义
(转自另外一个问题的回答:知道搜索条目--》百度的%符号是什么意思)
由于度娘会吞链接,所以不妨链接了。
它的功能是把对应的字符串解析成JS代码并运行
比如说你现在要运行一个可变的方法
function
name1(){……}
function
name2(){……}
var
m="name1";
eval(m+'()');//运行name1();
m='name2';
eval(m+'()');//运行name2();
用下面的网页没有试出你所说的错误啊? 你是怎么调用该函数的呢?
<script>
function checkform(o){
var emsg='',i=ousername,e,s;
if(''==ivalue){
e=i;emsg='\n·用户名不能为空';
}
else if(!/^[a-z_]\w{2,49}$/itest(ivalue)){
e=i;emsg='\n·用户名不合法,首字符只能为字母和下划线\n 其他可以是数字字母和下划线\n 并且长度在3到50个字符之间';
}
s='~!@#$%^&()_+|`-=\\{}[]:;"\'<>,/';
i=opassword;
if(''==ivalue){
if(!e)
e=i;
emsg+='\n·请输入密码'
}
else if(!eval('/^[\\w'+sreplace(/()/g,'\\$1')+']{6,30}$/test(\''+ivaluereplace(/'/g,'\\\'')+'\')')) {
if(!e)
e=i;
emsg+='\n·密码只能是数字字母以及'+s+'这些字符\n 并且长度在6到30个字符之间'
}
else if(orepwdvalue!=ivalue){
if(!e)e=i;emsg+='\n·两次输入的密码不相同'
}
i=oemail;
if(''==ivalue){
if(!e) e=i;
emsg+='\n·请输入您的Email地址'
}
else if(!/^(\w+[_|\-|\])\w+@(\w+[_|\-|\])\w+\[a-zA-Z]{2,4}$/gtest(ivalue)) {
if(!e)e=i;
emsg+='\n·Email地址格式不正确,请认真填写。'
}
alert(emsg);
return false
}
</script>
<form>
<input type="text" name="username" value="abc">
<input type="text" name="password" value="aaadef">
<input type="text" name="repwd" value="aaadef">
<input type="text" name="email" value="abc@xxxyyy">
<input type=submit name="submit" value="submit" onclick="checkform(thisform);">
</form>
用户名或昵称 : ^[\u4e00-\u9fa5A-Za-z0-9-_]$——只能中英文,数字,下划线,减号
用户密码: ^[a-zA-Z]\w{5,17}$ 正确格式为——以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
汉字 :^[\u4e00-\u9fa5],{0,}$
Email地址 :^\w+[-+]\w+)@\w+([-]\w+)\\w+([-]\w+)$
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\[a-zA-Z0-9_-]+)+$
IP地址 :^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$
日期 格式是否为YYYY-MM-DD:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])$/;
时间 格式是否为hh:mm:ss:^([0-1]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$
InternetURL :^http://([\w-]+\)+[\w-]+(/[\w-/%&=])$ ;^[a-zA-z]+://(w+(-w+))((w+(-w+)))(S)$
^http:\/\/[A-Za-z0-9]+\[A-Za-z0-9]+[\/=\%\-&_~`@[\]\':+!]([^<>\"\"])$
电话号码 :^(\(\d{3,4}\)|\d{3,4}-)\d{7,8}$——正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
^((\(\d{2,3}\))|(\d{3}\-))(\(0\d{2,3}\)|0\d{2,3}-)[1-9]\d{6,7}(\-\d{1,4})$
手机号码 :^0(13[0-9]|15[012356789]|18[0236789]|14[57])[0-9]{8}$:打长途时一般要在手机号码前加0。
身份z号 (15位或18位数字):^\d{15}(\d{2}[A-Za-z0-9])$
QQ号码 : /^[1-9]\d{4,8}$/
验证是否含有 ^%&',;=$\" 等字符:[^%&',;=$\x22]+
验证一年的12个月:^(0[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
验证数字:^[0-9]$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9])$
验证有两位小数的正实数:^[0-9]+([0-9]{2})$
验证有1-3位小数的正实数:^[0-9]+([0-9]{1,3})$
验证非零的正整数:^\+[1-9][0-9]$
验证非零的负整数:^\-[1-9][0-9]$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
整数:^-\d+$
非负浮点数(正浮点数 + 0):^\d+(\\d+)$
正浮点数: ^(([0-9]+\[0-9][1-9][0-9])|([0-9][1-9][0-9]\[0-9]+)|([0-9][1-9][0-9]))$
非正浮点数(负浮点数 + 0):^((-\d+(\\d+))|(0+(\0+)))$
负浮点数: ^(-(([0-9]+\[0-9][1-9][0-9])|([0-9][1-9][0-9]\[0-9]+)|([0-9][1-9][0-9])))$
浮点数 :^(-\d+)(\\d+)$
双精度:^[-\+]\d+(\\d+)$
//判断输入的字符是否为中文
function IsChinese(){
var str = documentgetElementById('str')valuetrim();
if(strlength!=0){
reg=/^[\u0391-\uFFE5]+$/;
if(!regtest(str)){
alert("对不起,您输入的字符串类型格式不正确!");
}
}
}
//判断输入的数字不大于某个特定的数字
function MaxValue(){
var val = documentgetElementById('str')valuetrim();
if(strlength!=0){
reg=/^[-+]\d$/;
if(!regtest(str)){//判断是否为数字类型
if(val>parseInt('123')){//“123”为自己设定的最大值
alert('对不起,您输入的数字超出范围');
}
}
}
}
//为上面提供各个JS验证方法提供trim()属性
Stringprototypetrim=function(){
return thisreplace(/(^\s)|(\s$)/g, "");
}
var patterms = newObject();
//验证IP
pattermsip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;
//验证EMAIL
pattermsemail = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\[a-zA-Z0-9_-]+)+$/;
//验证函数
functionverify(str,pat){
var thePat = patterms[pat];
if(thePattest(str)){
return true;
}else{
return false;
}
}
//测试alert(verify("asidycom@163com","email")+","+verify("19216811","ip")+","+verify("192168","ip"));
本文摘自: js正则表达式验证大全
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)