javascript 字符替换,eval作用域,angularjs 替换原理

javascript 字符替换,eval作用域,angularjs 替换原理,第1张

嗯,可以得,把变量的作用域由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正则表达式验证大全

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存