我现在的位置:

微知识 - 知识分享 - 电脑网络 - 编程开发
知识分享
  1. 正则表达式基本语法详解。

    完善时间:2021-03-10 22:43:54会员:bekda目录:电脑网络 - 编程开发浏览:930 次

    一、正则表达式是什么?

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。

    模式描述在搜索文本时要匹配的一个或多个字符串。


    二、正则表达式基本语法

    两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。

    例子如下:

        "^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]%"表示两个百分号中不应该出现字母。


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

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


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

    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">


    四、正则表达式的应用实例通俗说明

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

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

    /^[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到正无穷吧。


    五、正则表达式应用

    "^\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

    /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //年-月-日

    /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

    "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Email

    "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"     //电话号码

    "^(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地址

    ^([0-9A-F]{2})(-[0-9A-F]{2}){5}$   //MAC地址的正则表达式

    ^[-+]?\d+(\.\d+)?$   //值类型正则表达式


    5.javascript正则表达式检验

    "^\\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


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

    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

    }


    说明:

    以上资料来源网络收集,学习使用时请仔细甄别。

联系方式:

南京贝加达电子科技有限公司

  • 地址:南京市江北新区柳州北路21号涤太太科技大楼2F
  • 联系人:焦倩华(先生)
  • 手机:13813916308
  • 邮箱:Ser@bekda.com
  • 服务专线:400-8282-116
©2010-2024 Bekda Electronic Technology Co., Ltd. All right reserved.

苏公网安备 32011102010041号

320111201705278429

苏ICP备12027725号