热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式在js中的几个实例

javascript正则表达式检验****************************************************************************

Javascript正则表达式检验
/*********************************************************************************
* EO_JSLib.js
* Javascript正则表达式检验
**********************************************************************************/

//校验是否全由数字组成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验用户姓名:只能输入1-30个以字母开头的字串
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}

 


function acc()
{
 var name="";
 var name2="";
 var pp="!@#$%^&*()-_=+{][}/|;:/.,<>?";
 for(var i=0;i {
  name2=new RegExp("//S{1,20}")
  name+=name2.exec(arguments[i]);
  name3=arguments[i];
  if(name3 != name2.exec(arguments[i]))
  {
    alert("不符合规格");
     return false;
  }
  for(var k=0;k  {
   for(var h=0;h   {
    if(name3.charAt(h)==pp.charAt(k))
    {
     alert("不符合规格");
     return false;
    }
   }
  }
  
 }
 alert(name);
}

 

我的试验过程这里就不多废话再复述了,因为很多地方是反复试验绕很多弯路的,这里就直接给出试验总结出来的JScript中正则的用法。

废话完毕,下面进入正题!  

首相讲讲JScript的正则表达式对象RegExp。

JScript中提供正则表达式操作的类名为RegExp,可以用两种方式实例化RegExp类型的对象。  

方法一,构造函数实例化:

var myRegex = new RegExp("//w+", "igm "); 

///w+为实际正则表达式,注意第一个/为转义之用,igm分别表示忽略大小写,全局搜索,多行搜索,这个后面会解释 

方法二,直接赋值法:

var myRegex = //w+/igm; 

//效果与上一个语句一样,只是这里不需要用转移字符,原正则表达式是什么样子就是什么样子,igm就和前面例子的igm作用一样

具体用什么方式看大家喜好了,个人觉得第二种方式写的正则比较好读些,RegexBuddy帮助文档也是推荐第二种方式。   RegExp对象包含以下一些操作:

exec(string str):执行正则表达式匹配,并返回匹配结果,根据MSDN给出的例子运行结果看,exec每次执行都是从上次直接的匹配结束位置开始,并且返回的值似乎是RerExp对象,而RegexBuddy给出的解释是返回一个数组,但是没有给出详细例子,我觉得还是根据试验结果为依据比较可靠。  

compile(string regex, string flags):预编译正则表达式以使其运行更快,经过测试的确预先编译后效率有明显提升。regex参数为正则表达式,flags可以为以下3个值的组合: g – 全局搜索,我的试验结果是不加g标志就只能匹配第一个符合条件的字符串 i – 忽略大小写 m – 多行搜索,似乎默认已经是多行搜索了  

test(string str):如果str匹配正则表达式返回true,否则返回false,这个类似string对象的match方法  

RegExp对象包含以下一些属性:

index:字符串中第一个匹配表达式的位置,初始为-1  

input:正则表达式的匹配目标,注意是只读的  

lastIndex:下一个匹配表达式的位置,原话是(Returns the character position where the next match begins in a searched string.)也不知道有没有翻译错,这个属性我没有用到。  

lastMatch:最后一个匹配表达式的字符串  

lastParen:最后一个匹配的子匹配串,比如正则表达式里有多个以()分组的匹配项,lastParen表示最后一组所匹配的结果

leftContext:从目标字符串的开头到last match的起始位置的所有字符。  

rightContext:从last match的结束位置到整个目标字符串的结束位置的所有字符。  

$1…$9:表示第n组匹配的结果,这个在正则表达式里有多个以()分组时有用

接下来讲讲,JScript中String对象与正则表达式有关的操作:

match(string regex):接受一个正则表达式,并返回该字符串是否与这个表达式匹配。

replace(srting regex, string str):将与正则表达式匹配的子字符串替换为str,这个函数看似简单,不过还隐藏着更高级用法哦,请看以下例子。

例子1:

var str1 = "A:My name is Peter!/nB:Hi Peter!";

str1 = str1.replace(/Peter/g,"Jack");

alert(str1);

这个例子很简单就是把字符串替换了,这则表达式的威力当然不只于此,如果你用的熟练,还能用它完成很多以往需要大量代码完成的工作。比如在代码关键字前后加上由于高亮显示的HTML标签。从前面例子看来似乎replace只能把匹配的文本替换成新的文本啊,怎么利用它在关键字前后插入标签呢?返过来想象,如果在替换时能利用匹配结果,那么事情不就好办了,只要将关键字替换为:标签头 + 关键字 + 标签尾 不就行了。

可是要如何在replace中使用正则表达式匹配的结果呢?

这时候我们就需要用到“匹配变量”了,匹配变量用于表示正则匹配的结果,以下是匹配变量的说明:

$& -- 表示全部匹配组匹配的结果,最后再啰嗦一次,匹配组就是正则表达式的()分组

$$ -- 表示$字符,因为匹配变量用掉了$字符,所以需要转义

$n -- 类似前面的$1…$9,表示第n组匹配的结果

$nn -- 很简单就是第nn组匹配的结果

$` -- 就是前面提到过的leftContext,比如abcdefg被匹配出了d那么abc就是它的leftContext了

$'  -- 和上面符合很接近不要看错了!,这个就是rightContext了,举一反三,efg就是上面例子的rightContext了   那么现在我们要做到在关键字前后插入标签就很简单了:

var str1 = "A:My name is Peter!/nB:Hi Peter!";

str1 = str1.replace(/Peter/g, "$&");

alert(str1);

都0:39了。。。就写到这里吧。

正则工具软件下载(密码: regex):regex buddy 2.06.zip

我写的例子请看:JScript做语法加亮显示(代码精简)

 

一下是MSDN载抄的一些例子:

  function matchDemo(){var s;var re = new RegExp("d(b+)(d)","ig");var str = "cdbBdbsbdbdz";var arr = re.exec(str);s = "$1 contains: " + RegExp.$1 + "/n";s += "$2 contains: " + RegExp.$2 + "/n";s += "$3 contains: " + RegExp.$3;return(s);}function RegExpTest(){var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())if (ver >= 5.5){var src = "The rain in Spain falls mainly in the plain.";var re = //w+/g;var arr;while ((arr = re.exec(src)) != null)print(arr.index + "-" + arr.lastIndex + "/t" + arr);}else{alert("You need a newer version of JScript for this to work");}}function matchDemo(){var s;                                //Declare variable.var re = new RegExp("d(b+)(d)","ig"); //Regular expression pattern.var str = "cdbBdbsbdbdz";             //String to be searched.var arr = re.exec(str);               //Perform the search.s = "$1 returns: " + RegExp.$1 + "/n";s += "$2 returns: " + RegExp.$2 + "/n";s += "$3 returns: " + RegExp.$3 + "/n";s += "input returns : " + RegExp.input + "/n";s += "lastMatch returns: " + RegExp.lastMatch + "/n";s += "leftContext returns: " + RegExp.leftContext + "/n";s += "rightContext returns: " + RegExp.rightContext + "/n"; s += "lastParen returns: " + RegExp.lastParen + "/n";return(s);                            //Return results.}document.write(matchDemo());   
 


各位路过的大侠如果对本文有什么看法欢迎在此提出,大家共同学习,共同进步。

 

//校验密码:只能输入6-20个字母、数字、下划线
function isPasswd(s)
{
var patrn=/^(/w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}

//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
function isTel(s)
{
//var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?(/d){1,12})+$/;
var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验手机号码:必须以数字开头,除数字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验邮政编码
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}

//校验搜索关键字
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|///][/]/{/}:;'/,.<>/?]{1}[^`~!@$%^&()+=|///][/]/{/}:;'/,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

 

function fu()
{
 var name="";
 var name2="";
 var pp="!@#$%^&*()-_=+{][}/|;:/.,<>?";
 for(var i=0;i {
  name=new RegExp("[0-9a-zA-Z]{1,10}");//{1,10}是表示至少是1个到10之间的个数
  name2+=name.exec(arguments[i])
  
 }
 alert(name2);
}


推荐阅读
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
zhangpingzizai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有