首先是思路
要匹配一段文本中的所有符合某个条件的文本段。
比如在abcdacdssd中匹配 (a任意字母b) 共三个字母这个结构的文本段
我们先想到句首是a,所以先是^a
然后共一个所以就是^a?
这样就匹配了ab和ac。
常用的特殊代码
代码/语法 | 说明 |
---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用的量词
代码/语法 | 说明 |
---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用的反义代码
代码/语法 | 说明 |
---|
\W | 匹配任意不是字母和数字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
分组语法
捕获
代码/语法 | 说明 |
---|
(exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?exp) | 匹配exp,并捕获文本到名称为name的组里 |
(?:exp) | 匹配exp,不捕获匹配的文本 |
位置指定
代码/语法 | 说明 |
---|
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(? | 匹配前面不是exp的位置 |
注释
代码/语法 | 说明 |
---|
(?#comment) | 无作用,只是为了提供让人阅读注释 |
断言
代码/语法 | 说明 |
---|
(?<= # | 断言要匹配的文本的前缀 |
<(\w+)> # | 查找尖括号括起来的字母或数字(即HTML/XML标签) |
) # | 前缀结束 |
.* # | 匹配任意文本 |
(?= # | 断言要匹配的文本的后缀 |
<\/\1> # | 查找尖括号括起来的内容:前面是一个”/”,后面是先前捕获的标签 |
) # | 后缀结束 |
懒惰限定符
代码/语法 | 说明 |
---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
常用的处理选项
代码/语法 | 说明 |
---|
IgnoreCase(忽略大小写) | 匹配时不区分大小写 |
Singleline(单行模式) | 更改.的含义,使它与每一个字符匹配(包括换行符\n)。 |
IgnorePatternWhitespace(忽略空白) | 忽略表达式中的非转义空白并启用由#标记的注释。 |
ExplicitCapture(显式捕获) | 仅捕获已被显式命名的组。 |
(?’group’) | 把捕获的内容命名为group,并压入堆栈(Stack)。 |
(?’-group’) | 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败。 |
(?!) | 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败。 |
Multiline(多行模式):更改^和$的含义,
使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
应用
引入validform.js和jqoery文件
$(function(){
ck = $(".validform").Validform({
tiptype:3,
datatype:{//传入自定义datatype类型,可以是正则,也可以是函数(函数内会传入一个参数);
"*6-20": /^[^\s]{6,20}$/,
"username":function(gets,obj,curform,regxp){
//参数gets是获取到的表单元素值,obj为当前表单元素,curform为当前验证的表单,regxp为内置的一些正则表达式的引用;
var reg1=/^[\w\.]{4,16}$/,
reg2=/^[\u4E00-\u9FA5\uf900-\ufa2d]{2,8}$/;
if(reg1.test(gets)){return true;}
if(reg2.test(gets)){return true;}
return false;
//注意return可以返回true 或 false 或 字符串文字,true表示验证通过,返回字符串表示验证失败,字符串作为错误提示显示,返回false则用errmsg或默认的错误提示;
}
});
});
//如果是input type=submit form提交,下面的就不用写
function doAjax(){
if(!ck.check())
{
return;
}
//下面可以写AJAX代码
}
//html
<ul style="list-style-type:none">
<li>
用户 名:
<input datatype="s3-10" sucmsg="成功" errormsg="失败" type="text" name="userName" id="userName" maxlength="50"/>
<span class="Validform_checktip">*用户名为3~10个字符</sapn>
</li>
<li>
<button onclick="doAjax()"></button>
<!
</li>
</ul>
这是一个表单验证插件,这个支持自定义正则验证。