欢迎您来到“名字什么都是浮云”的博客空间!

正则表达式-最全最常用

以下内容由脚本之家,作者:OnlyLiu提供:

 

正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

1.正则表达式基本语法

表示字符串开始和结束的符号:'^'和'$'

例子:

"^The" 表示所有以"The"开始的字符串("There","The cat"等);
"of despair$" 表示所以以"of despair"结尾的字符串;
"^abc$" 表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;
"notice" 表示任何包含"notice"的字符串。

 

    
 
    

像最后那个例子,如果你不使用两个特殊字符,你就在表示要查找的串在被查找串的任意部分——你并

不把它定位在某一个顶端。

 

表示一个或一序列字符重复出现的次数的三个符号:'*','+'和'?'

例子:

"ab*" 表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
"ab+" 表示一个字符串有一个a后面跟着至少一个b或者更多;
"ab?" 表示一个字符串有一个a后面跟着零个或者一个b;
"a?b+$" 表示在字符串的末尾有零个或一个a跟着一个或几个b。

 





表示重复次数的范围,使用大括号:{ }

例子:

"ab{2}" 表示一个字符串有一个a跟着2个b("abb");
"ab{2,}" 表示一个字符串有一个a跟着至少2个b;
"ab{3,5}" 表示一个字符串有一个a跟着3到5个b。

 

 



请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,'*','+'和

'?'相当于"{0,}","{1,}"和"{0,1}"。

 

表示”或“的操作,使用树分割线:'¦'

"hi¦hello" 表示一个字符串里有"hi"或者"hello";
"(b¦cd)ef" 表示"bef"或"cdef";
"(a¦b)*c" 表示一串"a""b"混合的字符串后面跟一个"c";

 




可以替代任何字符:'.'

"a.[0-9]" 表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$" 表示有任意三个字符的字符串(长度为3个字符);

 



表示某些字符允许在一个字符串中的某一特定位置出现:方括号 [ ]

"[ab]" 表示一个字符串有一个"a"或"b"(相当于"a¦b");
"[a-d]" 表示一个字符串包含小写的'a'到'd'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");
"^[a-zA-Z]" 表示一个以字母开头的字符串;
"[0-9]%" 表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$" 表示一个字符串以一个逗号后面跟着一个字母或数字结束。

 





 

你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表
示两个百分号中不应该出现字母)。

为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符'\'。

请注意在方括号中,不需要转义字符。

 

2.正则表达式验证控制文本框的输入字符类型

1.只能输入数字和英文的:

<input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1">

2.只能输入数字的:

<input onkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2">

3.只能输入全角的:

<input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3">

4.只能输入汉字的:

<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4">

3.正则表达式的应用实例通俗说明

*******************************************************************************

//校验是否全由数字组成

/^[0-9]{1,20}$/

^ 表示打头的字符要匹配紧跟^后面的规则

$ 表示打头的字符要匹配紧靠$前面的规则

[ ] 中的内容是可选字符集

[0-9] 表示要求字符范围在0-9之间

{1,20}表示数字字符串长度合法为1到20,即为[0-9]中的字符出现次数的范围是1到20次。
/^ 和 $/成对使用应该是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。
*******************************************************************************

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/

^[a-zA-Z]{1} 表示第一个字符要求是字母。

([a-zA-Z0-9]|[._]){4,19} 表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[._]组成。

*******************************************************************************

//校验用户姓名:只能输入1-30个以字母开头的字串

/^[a-zA-Z]{1,30}$/

*******************************************************************************

//校验密码:只能输入6-20个字母、数字、下划线

/^(\w){6,20}$/

\w:用于匹配字母,数字或下划线字符

*******************************************************************************

//校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”

/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/

\d:用于匹配从0到9的数字;

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次

可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等

*******************************************************************************

//校验URL

/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )

\ / :表示字符“/”。

. 表示所有字符的集

+ 等同于{1,},就是1到正无穷吧。

*******************************************************************************

//校验纯中文字符
/^[\u4E00-\u9FA5]+$/
[\u4E00-\u9FA5] :估计是中文字符集的范围吧
以上表达式均在下面的javascript中测试通过
<html>
<script language="JavaScript">
<!--
function regx(r,s)
{
    if (r == null || r == ""){
       return false;
    }
    var patrn= new RegExp(r);
    if (patrn.exec(s))
       return true
    return false
}
-->
</script>
<body>
<form>
    规则表达式 : <input type="input" name="regxStr" value="" > (填写/ /之间的表达式)
<br>
    校验字符串 : <input type="input" name="str" value="" >
    <input type="button" name="match" value="匹配" onClick="alert(regx(regxStr.value,str.value));">
</form>
</body>
</html>

 

4.正则表达式应用

^[-+]?\d+(\.\d+)?$ //值类型正则表达式
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正则表达式
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"  //电话号码
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"  //Emil
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/  //  年-月-日
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串 
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 
"^[a-z]+$" //由26个英文字母的小写组成的字符串 
"^[A-Z]+$" //由26个英文字母的大写组成的字符串 
"^[A-Za-z]+$" //由26个英文字母组成的字符串 
"^(-?\d+)(\.\d+)?$" //浮点数 
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^((-\d+(\.\d+)?)|(0+(\.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+)?$" //非负浮点数(正浮点数 + 0) 
"^-?\d+$" //整数
"^-[0-9]*[1-9][0-9]*$" //负整数 
"^((-\d+)|(0+))$" //非正整数(负整数 + 0) 
"^[0-9]*[1-9][0-9]*$" //正整数 
"^\d+$" //非负整数(正整数 + 0) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

5.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
}
//校验密码:只能输入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 isBetween(val, lo, hi) {
    if ((val < lo) || (val > hi)) { return (false); }
    else { return (true); }
}

function isDate(theStr) {
    var the1st = theStr.indexOf('-');
    var the2nd = theStr.lastIndexOf('-');
    if (the1st == the2nd) { return (false); }
    else {
        var y = theStr.substring(0, the1st);
        var m = theStr.substring(the1st + 1, the2nd);
        var d = theStr.substring(the2nd + 1, theStr.length);
        var maxDays = 31;
        if (isInt(m) == false || isInt(d) == false || isInt(y) == false) {
            return (false);
        }
        else if (y.length < 4) { return (false); }
        else if (!isBetween(m, 1, 12)) { return (false); }
        else if (m == 4 || m == 6 || m == 9 || m == 11) maxDays = 30;
        else if (m == 2) {
            if (y % 4 > 0) maxDays = 28;
            else if (y % 100 == 0 && y % 400 > 0) maxDays = 28;
            else maxDays = 29;
        }
        if (isBetween(d, 1, maxDays) == false) { return (false); }
        else { return (true); }
    }
}

function isEuDate(theStr) {
    if (isBetween(theStr.length, 8, 10) == false) { return (false); }
    else {
        var the1st = theStr.indexOf('/');
        var the2nd = theStr.lastIndexOf('/');
        if (the1st == the2nd) { return (false); }
        else {
            var m = theStr.substring(the1st + 1, the2nd);
            var d = theStr.substring(0, the1st);
            var y = theStr.substring(the2nd + 1, theStr.length);
            var maxDays = 31;
            if (isInt(m) == false || isInt(d) == false || isInt(y) == false) {
                return (false);
            }
            else if (y.length < 4) { return (false); }
            else if (isBetween(m, 1, 12) == false) { return (false); }
            else if (m == 4 || m == 6 || m == 9 || m == 11) maxDays = 30;
            else if (m == 2) {
                if (y % 4 > 0) maxDays = 28;
                else if (y % 100 == 0 && y % 400 > 0) maxDays = 28;
                else maxDays = 29;
            }
            if (isBetween(d, 1, maxDays) == false) { return (false); }
            else { return (true); }
        }
    }
}

function isComdate(lessDate, moreDate) {
    if (!isDate(lessDate)) { return (false); }
    if (!isDate(moreDate)) { return (false); }
    var less1st = lessDate.indexOf('-');
    var less2nd = lessDate.lastIndexOf('-');
    var more1st = moreDate.indexOf('-');
    var more2nd = moreDate.lastIndexOf('-');
    var lessy = lessDate.substring(0, less1st);
    var lessm = lessDate.substring(less1st + 1, less2nd);
    var lessd = lessDate.substring(less2nd + 1, lessDate.length);
    var morey = moreDate.substring(0, more1st);
    var morem = moreDate.substring(more1st + 1, more2nd);
    var mored = moreDate.substring(more2nd + 1, moreDate.length);
    var Date1 = new Date(lessy, lessm, lessd);
    var Date2 = new Date(morey, morem, mored);
    if (Date1 > Date2) { return (false); }
    return (true);
}

function isEmpty(str) {
    if ((str == null) || (str.length == 0)) return true;
    else return (false);
}

function isInt(theStr) {
    var flag = true;
    if (isEmpty(theStr)) { flag = false; }
    else
    {
        for (var i = 0; i < theStr.length; i++) {
            if (isDigit(theStr.substring(i, i + 1)) == false) {
                flag = false; break;
            }
        }
    }
    return (flag);
}

function isReal(theStr, decLen) {
    var dot1st = theStr.indexOf('.');
    var dot2nd = theStr.lastIndexOf('.');
    var OK = true;
    if (isEmpty(theStr)) return false;
    if (dot1st == -1) {
        if (!isInt(theStr)) return (false);
        else return (true);
    }
    else if (dot1st != dot2nd) return (false);
    else if (dot1st == 0) return (false);
    else {
        var intPart = theStr.substring(0, dot1st);
        var decPart = theStr.substring(dot2nd + 1);
        if (decPart.length > decLen) return (false);
        else if (!isInt(intPart) || !isInt(decPart)) return (false);
        else if (isEmpty(decPart)) return (false);
        else return (true);
    }
}

function isEmail(theStr) {
    var atIndex = theStr.indexOf('@');
    var dotIndex = theStr.indexOf('.', atIndex);
    var flag = true;
    theSub = theStr.substring(0, dotIndex + 1)
    if ((atIndex < 1) || (atIndex != theStr.lastIndexOf('@')) || (dotIndex < atIndex + 2) || (theStr.length <= theSub.length))
    { return (false); }
    else { return (true); }
}

function newWindow(doc, hite, wide, bars, resize) {
    var winNew = "_blank";
    var opt = "toolbar=0,location=0,directories=0,status=0,menubar=0,";
    opt += ("scrollbars=" + bars + ",");
    opt += ("resizable=" + resize + ",");
    opt += ("width=" + wide + ",");
    opt += ("height=" + hite);
    winHandle = window.open(doc, winNew, opt);
    return;
}

function DecimalFormat(paramValue) {
    var intPart = parseInt(paramValue);
    var decPart = parseFloat(paramValue) - intPart;
    str = "";
    if ((decPart == 0) || (decPart == null)) str += (intPart + ".00");
    else str += (intPart + decPart);
    return (str);
}

 

"^\\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数 
"^((-\\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\\d+$" //整数 
"^\\d+(\\.\\d+)?$" //非负浮点数(正浮点数 + 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+)?)|(0+(\\.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+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串 
"^[a-z]+$" //由26个英文字母的小写组成的字符串 
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 
"^\\w+$" //由数字、26个英文字母或者下划线组成的字符串 
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$" //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$" //url

 

 

 

 

 

 

 

 

 

 

 

 


 

 

一、校验数字的表达式

  • 数字:^[0-9]*$
  • n位的数字:^\d{n}$
  • 至少n位的数字:^\d{n,}$
  • m-n位的数字:^\d{m,n}$
  • 零和非零开头的数字:^(0|[1-9][0-9]*)$
  • 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
  • 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
  • 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
  • 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
  • 有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
  • 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
  • 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
  • 非负整数:^\d+$ 或 ^[1-9]\d*|0$
  • 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
  • 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  • 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  • 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  • 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  • 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

校验字符的表达式

  • 汉字:^[\u4e00-\u9fa5]{0,}$
  • 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  • 长度为3-20的所有字符:^.{3,20}$
  • 由26个英文字母组成的字符串:^[A-Za-z]+$
  • 由26个大写英文字母组成的字符串:^[A-Z]+$
  • 由26个小写英文字母组成的字符串:^[a-z]+$
  • 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
  • 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  • 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
  • 禁止输入含有~的字符:[^~\x22]+

三、特殊需求表达式

  • Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  • InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  • 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  • 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
  • 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
  • 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
  • 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  • 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
  • 钱的输入格式:
    1. 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
    2. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
    3. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
    4. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    5. 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
    6. 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    7. 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
    8. 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
    9. 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  • xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  • 中文字符的正则表达式:[\u4e00-\u9fa5]
  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  • HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  • IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

 

posted @ 2017-12-26 17:00  名字什么都是浮云  阅读(945)  评论(0编辑  收藏  举报