㈠ 如何利用js正则表达式判断ip地址的合法性
用正则表达式判断吧:publicstaticvoidRunSnippet(){Regexrx=newRegex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))");if(rx.IsMatch("192.168.130.11")){System.Console.WriteLine("IsIPaddress");}else{System.Console.WriteLine("IsnotIPaddress");}}IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开。例如:某台计算机IP地址为10.11.44.100。分析IP地址的组成特点:250-255、200-249、0-199。这三种情况可以分开考虑,1.250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5]2.200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4]\d3.0-199:这个可以继续分拆,这样写起来更加简单明了.3.1.0-9:特点:一位数,个位是0~9,用正则表达式可以写成:\d3.2.10-99:特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]\d3.3.100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1\d{2}于是0-199用正则表达式可以写成(1\d{2})|([1-9]?\d),这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))最后,得到IP地址的正则表达式:((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))其中有几个需要注意的细节1.正则表达式规则之一:最先开始的匹配拥有最高的优先权,所以三位数的匹配放在二位数的前面。2.0.0.0.0和255.255.255.255是合法存在的IP地址。3.0.0.01.0在这里不被认为是合法的。
㈡ js中用正则表达式如何对用户名进行基本验证
^表示开始。$表示结束。例:Regex reg = new Regex(@"^\d{3,4}-\d{7,8}$");x0dx0a加了开始结束标记之后,输入的数量和内容必须完全相同才为true(完全匹配)x0dx0a (\d,代表数字0-9)(\D,表示不是数字)(\w,表示a-z,A-Z,0-9,_)(\W 表示不是上面小w表示的)(\s 表示 空格。)x0dx0a ”*“ 表示0到多个x0dx0a“+” 1到多个x0dx0a“?” 0个或者1个x0dx0a“[ ]“ (一个数到另一个数之间)自定义匹配内容x0dx0a“ |”或者x0dx0a “{}”{最小个数,最大个数} 次数x0dx0a例如:邮箱验证:x0dx0aRegex r = new Regex(@"^[\w]+@[\w].[A-Z|a-z]$");x0dx0a自己kankan琢磨一下就懂了
㈢ JS正则表达式基础认知
正则表达式,又叫规则表达式,英文名Regular Expression,本质是操作字符串
1、模式匹配 表单验证
2、文本检索 搜索
3、替换 过滤
简单,方便,性能高
var reg=new RegExp('规则','模式') 通过构造函数创造
var reg=/规则/模式 通过字面量创建
i 忽略大小写
g 全局
m 多行
注:不分前后顺序
str.match(正则) 返回数组 没有返回 null
str.search(正则) 返回下标 没有返回-1
str.replace(正则,替换成谁) 返回替换后的字符串
str.replace(正则,function(s){
s 符合正则条件的字符串
})
\d 数字 /[0-9]/
\s 空格
\w /[0-9a-zA-Z_]/ 单词
\D 非数字 /[^0-9]/
\S 非空白
\W 非单词 /[^0-9a-zA-Z_]/
.(点) 代表任意
\. 代表.
\\ 代表\
\\\\ 代表\\
\/ 代表/
只要有特殊意义的都要转译
+ {1,m} 若干个 最少1个最多不限
? {0,1} 可有可无
* {0,m} 可以没有,多了不限
{n} 正好n个
{n,m} 最少n个 最多m个
{n,} 最少n个,最多不限
{,m} × 没有这种写法
^ 行首
注:如果^单独使用,代表字符串行首,配合m使用会识别段落
$ 行尾
[] 中括号
1、[]里面的东西都是或的形式
2、[]里面和放范围
3、[^] 不代表行首,代表除去里面的范围
4、其他特殊符号代表本身
1、test() 一般配合^ &
功能:用于检测是否于正则匹配。
返回:布尔值,true匹配,false不匹配
语法:reg.test(检测的内容)
2 exec()
功能:用于检测是否于正则匹配。
返回:数组, 不匹配返回null
语法:reg.test(检测的内容)
再做验证之前:验证分两种,一种强校验,一种弱校验
(1)验证手机号 /1[23457]\d{9}/
(2)验证座机号 区号-座机号 /(0[1-9]\d-)?[1-9]\d{7}/
(3)验证qq /[1-9]\d{4,11}/
(4)实现一个trim函数 去掉收尾空格 /^\s+|\s+$/g
(5)中文 /[\u4e00-\u9fa5]/
(6)验证年龄 18-100 /^1[89]|[2-9]\d|100$/
(7)邮箱: [email protected] /^\w{5,12}@[a-z0-9]{2,8}\.com$/
(8) 过滤html /<[^>]+>/g;
1、分组 ab+ abbbb (ab)+
2、匹配子级
配合replace使用 str.replace(reg,function(s,a,b){
s是 整体
a是第一个括号的项
b是第二个括号的项
})
3、优选级 ^(1[89]|[2-9]\d|100)$
4、重复的子项
abbb /(a)(b)\2+/
今天先给大家总结到这儿,后续还会有补充
㈣ new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");这个正则表达式麻烦高人解释一下
function getParameter(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i");var r = location.search.substr(1).match(reg);if (r!=null) return (r[2]); return null;} 以上是一个用于获取url中的查询参数的 js 方法===========1) 其中的正则表达式用到了字符串拼接 (^|&) 表示行首或者以&开头 name 表示传进来的变量 = 还是表示等号 ([^&]*) 表示非&的任意个字符 (0到多个) (&|$) 表示以&结束或者是行尾===========2) var r = location.search.substr(1).match(reg);location.search.substr(1) 用于获得 URL 的查询部分 (?后面的内容).比如地址栏中的地址是r[0] = "&name=QQ&" 是整个正则表达式匹配到的内容r[1] = "&" 是正则表达式中第一个括号匹配到的内容,即 (^|&) 匹配到的内容r[2] = "QQ" 是正则表达式中第二个括号匹配到的内容,即 ([^&]*)匹配到的内容r[3] = "&" 是正则表达式中最后一个括号匹配到的内容即 (&|$) 匹配到的内容北京澜翰科技工程师组㈤ javascript 使用 new RegExp 创建正则表达式
varre=newRegExp("abc","g");//用构造函数创建,匹配模式放在“”内就行了
varre=/abc/g;//字面量创建就是这样的
准确来说,你测试正确的也是错误的写法
㈥ js数组和正则表达式
RegExp()的第二个参数主要支持g,i,m这3个修饰性字符
字符g,用来指定全局匹配
字符 i ,是用来指定大小写为等同;
字符 m 是多行一词的缩写,设置匹配模式能够在多行字符串中执行操作
var a = "javasssss";
var s = new RegExp("a","gi");
alert(a.match(s));
返回值为a,a
var a = "javasssss sssswww aaaaa";
var s = new RegExp("\\b\\w","gi");
alert(a.match(s));
返回值为j,s,a
\\b\\w是一个匹配模式,其中反斜杠表示转义序列,而双斜杠表示的是斜杠的意思,\b表示边界的意思\w表示的任意的ASCii码,指的就是每一个单词的首字母;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\x61");
var s=a.match(r);
alert(s);
x61表示的是a的十六进制的ascii码,除了十六进制以外,还可以直接使用八进制数值来匹配例如;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\141");
var s=a.match(r);
alert(s);
js中的特殊字符
\o表示空字符
\t表示制表位
\n表示换行符
\v表示垂直制表符
\f表示换页符
\r表示回车符
\a表示alert字符
\e表示escape字符
\b表示回退字符
\cX表示控制自负^x
对于这些特殊的字符,如果在RegExp构造函数中使用,必须使用双斜杠表示专业。
定义简单的字符类
var a = "javasssss sssswww aaaaa";
var r=new RegExp("[abcsw]","gi");
var s=a.match(r);
alert(s);
返回值为
查找字符串中是否有字符类中的字母
定义反义字符类
var a = "aba abd abg abe";
var r=new RegExp("ab[^abc]","gi");
var s=a.match(r);
alert(s);
返回值为
第三个字符表示除了a,b,c以外的字符都可以
var r= new RegExp("[^012345679]","gi");
匹配除了数字以外任意的字符。反义字符类比简单字符类更加强大和实用
如果任意双字节的汉字,你可以这样设计
var r=new RegExp("\\u0000-\\u00ff","gi");
预定义字符类
㈦ JS正则表达式详解
RegExp是JS的正则表达式对象,实例化一个RegExp对象有 字面量 和 构造函数 2种方式。
字面量实例化RegExp对象
var reg=/js/gi;
开始和结束的斜线/是正则表达式的边界,//中间的文本是正则表达式文本,后面的gi是正则表达式的修饰符。
构造函数实例化RegExp对象
var reg=new Regex(‘js’,’gi’);
第一个参数是正则表达式文本,第二个参数是正则表达式修饰符。
global:RegExp 对象是否具有标志 g。
ignoreCase:RegExp 对象是否具有标志 i。
lastIndex:一个整数,标示开始下一次匹配的字符位置。
multiline:RegExp 对象是否具有标志 m。
source:正则表达式的源文本。
RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
test()
test() 方法检索字符串中的指定值。返回值是 true 或 false。
示例:
var reg=/js/gi;
var result=reg.test(‘I like js’);
结果:true
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
示例:
var reg=/js/gi;
var result=reg.exec(‘I like JS’);
结果:JS
compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。
g:global全文搜索,如果不添加此参数,搜索到第一个匹配就会停止
i:ignore case 不区分大小写,默认是区分大小写的
m:multiple lines 多行搜索,默认只搜索第一行
正则表达式文本部分包含 原义文本字符 和 元字符, 其中的原义文本字符代表字符本身意义的字符,如abc123之类的字符。
元字符代表有特殊含义非字母字符,如、w、d、+、*、? 等。
常用的元字符
更多的JS正则元字符请参考: http://www.runoob.com/regexp/regexp-metachar.html
一般情况下正则表达式中的一个字符对应字符串中的一个字符,如表达式ab的含义是ab。
表达式中用 [] 来定义一个字符类,表示可以匹配[]里面的这类字符,是一个泛指,而不是一一对应的关系。
如表达式[abc123],表示有其中一个字符串都可以匹配。
在字符类里面使用横线-连接2个数字或者字母就可以构建一个范围类,如[a-zA-z0-9-]表示可以匹配26个大小写字母和0-9的全部数字以及横线-。
注意,要匹配横线”-“,必须把横线放在最后面。
预定义类可以理解为JS默认给我们写好的范围类,让我们可以使用一个简单的元字符来使用它。如”w”就是一个预定义类,它等价于范围类[A-Za-z0-9_];“.”可以匹配除 “ ” 之外的任何单个字符。
边界包含2种,一种是以字符串开始或结尾的边界,另一种是单词边界
量词表示可以匹配连续多次的元字符
JS正则表达式默认是贪婪模式匹配,它会以最多匹配原则进行查找,非贪婪模式可以让表达式以最少匹配原则进行查找。
非贪婪模式只需要在量词后面加上”?”即可,如”123456789″字符串想以3个数字为一组进行匹配表达式写法/d{3,5}?/g。
表达式中用 () 来定义一个分组,使元字符可以作用于一个表达式字符串组合,如/(js|php){3}/gi。
表达式中的每一个分组匹配的内容都是一个可以捕获的变量,可以使用$1、$2、$3… 来取值,如表达式/(d{4})-(d{2})-(d{2})/中包含$1、$2、$3。如果想忽略分组匹配的内容,需要在分组前面增加“?:”,就可以得到分组匹配之外的内容。
前瞻就是正则表达式后面加上断言部分,它不但要匹配表达式部分,还需要满足断言部分,匹配的结果不会包含断言部分。
正向前瞻 exp(?=assert) 如 “w(?=d)”
负向前瞻 exp(?!assert) 如 “w(?!d)”
match()
stringObject.match(regexp)
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。
否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。
search()
stringObject.search(regexp)
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
replace()
stringObject.replace(regexp/substr,replacement)
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
split()
stringObject.split(separator,howmany)
如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)
正则表达式语法语意测试工具: https://regexper.com/
㈧ js中用正则表达式对用户名进行基本验证,包括不能为空,长度 特殊字符等! 大家帮帮忙,不胜感激
^用户名复一般就是4-12位的样子制吧,只能是字母(大小写敏感),数字,下划线,不能以下划线开头和结尾
/^[a-zA-Z\d]\w{3,11}[a-zA-Z\d]$/
这个就行了
---------------
var str = 'adcdefg';//用户名
var reg = /^[a-zA-Z\d]\w{3,11}[a-zA-Z\d]$/;//正则
if(reg.test(str)){
alert('验证成功');
}else{
alert('验证失败');
}
㈨ Js 中的 正则表达式
1定义正则表达式
在js中定义正则表达式很简单,有两种方式,一种是通过构造函数,一种是通过//,也就是两个斜杠。
例如
代码如下:
var re =new RegExp("\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}");
使用构造函数定义正则表达式,注意大小写,负责就会不起作用。由于构造函数的参数是一个字符串,也可以是两个斜杠的方式定义,遇到一些特殊字符就需要使用\进行转义
通过双斜杠的方式定义同样的正则表达式
代码如下:
var re =/\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
代码如下:
var re =new RegExp( /^\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/);
可以和构造函数达到同样的效果,但仔细分析,发现,通过构造函数需要更多的转义字符\
2关于验证的三个正则表达式方法
使用正则表达式的主要有字符串的方法match,正则表达式的方法exec,test
正则表达式方法test测试给定的字符串是否满足正则表达式,返回值是bool类型的,只有真和假,如果只是单纯的判断,不需要其他的处理,可以使用尤其是验证时。
代码如下:
function test(){
var text="index.aspx?test=1&ww=2&www=3"; //
var re =/\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
// var re =new RegExp("\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}");
var result= re.test(text);
if(result)
{
alert("ok");
}else
{
alert("err");
}
}
正则表达式方法exec测试给定的字符串是否满足正则表达式,返回匹配到的字符串,如果没有匹配的则返回null,和test基本一致,如果需要获取匹配的各个子字符串,可以使用下标的方式,把上边的test的例子可以改写如下
代码如下:
function test(){
var text="index.aspx?test=1&ww=2&www=3";
var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
// var re =new RegExp( "\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}");
var result= re.exec(text);
if(result)
{
alert("ok");
alert(result); // 是?test=1&ww=2&www=3,ww=2&
alert(result[0]+",0");//是?test=1&ww=2&www=3
alert(result[1]+",1");//是ww=2&
}else
{
alert("err");
}
}
match其实是字符串的方法,但参数确是一个正则表达式,把上边的例子改写后,如下
代码如下:
function test(){
var text="index.aspx?test=1&ww=234"; //
var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
// var re2 = "(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}"
var result= text.match(re);
if(result)
{
alert(result);//?test=1&ww=234,test=1&
alert(result[0]+",0");//?test=1&ww=234
alert(result[1]+",1");//test=1&
}else
{
alert("err");
}
}
其实字符串类还有多个函数可以传递正则表达式,split,search,replace等但这些方法已经不适合验证了。
代码如下:
function test(){
var text="index.aspx?test=1&ww=234"; //
var re = /\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;
// var re2 = "(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}"
var result= text.split(re);
alert(result);
alert(result[0]+",0");
alert(result[1]+",1");
}
3正则表达式式的转义字符
在正则表达式中会经常出现转义字符,例如问号?在正则表达式中有特殊的含义,如果需要匹配问号?就需要转义,使用转义字符反斜杠\
如下两个都是匹配问号开头的一段字符串
代码如下:
function test(){
var text="?test=1&ww=2&www=3";
var re = /^\?(\w{1,}=\w{1,}&){1,}\w{1,}=\w{1,}/;// \?表示配置问号?
// var re =new RegExp( "^\\?(\\w{1,}=\\w{1,}&){1,}\\w{1,}=\\w{1,}");// \\?表示配置问号?
var result= re.exec(text);
if(result)
{
alert("ok");
alert(result);
alert(result[0]+",0");
alert(result[1]+",1");
}else
{
alert("err");
}
}