11位数字正则表达式 ios_ios 正则表达式 判断6位数字 - CSDN
精华内容
参与话题
  • 1用正则表达式  //是否是纯数字  + (BOOL)isNumText:(NSString *)str{   NSString * regex = @"(/^[0-9]*$/)";   NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@...
    1. 1用正则表达式   
    2. //是否是纯数字  
    3. + (BOOL)isNumText:(NSString *)str{  
    4.     NSString * regex        = @"(/^[0-9]*$/)";  
    5.     NSPredicate * pred      = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];  
    6.     BOOL isMatch            = [pred evaluateWithObject:str];  
    7.     if (isMatch) {  
    8.         return YES;  
    9.     }else{  
    10.         return NO;  
    11.     }  
    12. }  
    13. 具体正则对不对  还需要大家来看以下   
    14. 第二种 系统源生的   
    15. 我推荐第二种   
    16. - (NSString *) trimming {  
    17.       
    18.     return [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];  
    19. }  
    20. //判断是不是纯数字  
    21.     [NSCharacterSet decimalDigitCharacterSet];  
    22.     if ([[textField.text stringByTrimmingCharactersInSet: [NSCharacterSet decimalDigitCharacterSet]]trimming].length >0) {  
    23.         DLog(@"不是纯数字");  
    24.     }else{  
    25.         DLog(@"纯数字!");  
    26.     }  


    最近在做一个即时通讯的项目, 首先是注册登录界面, 项目需求是通过用户输入的手机号码获取一个4位数的验证码来完成注册,那么, 问题来了?

    如何判断用户输入的手机号码是合法的正确的11位手机号码呢?(这些简单的问题就在前端判断好了再post给后台 ,没必要把各种没用的数据都post给后台)

    判断手机号码是否正确的方法很多,我是用正则表达式来完成匹配的,废话不多说,直接上代码:

     


    1. //正则表达式匹配11位手机号码  
    2.     NSString *regex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";  
    3.     NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];  
    4.     BOOL isMatch = [pred evaluateWithObject:_telField.text];  
    5. if(isMatch) {  //有效手机号  
    6. }else//无效手机号  
    7.     {  
    8.         
    9.             if (ios7) {  
    10.                 UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"无效的手机号码,请重新输入..." delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil nil];  
    11.                 alertView.tag = 104;  
    12.                 [alertView show];  
    13.                  
    14.             }else  
    15.             {  
    16.                 UIAlertController*alertController = [UIAlertController alertControllerWithTitle:nil message:@"无效的手机号码,请重新输入..." preferredStyle:UIAlertControllerStyleAlert];  
    17.                 UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction*action) {  
    18.                     [_telField selectAll:self];  
    19.                 }];  
    20.                 [alertController addAction:otherAction];  
    21.                 [self presentViewController:alertController animated:YES completion:nil];  
    22.             }  
    23.    
    24.    
    25.         }  
    26.          
    27.          
    28.     }  



    联通,移动和电信每年都会添加新的号码,所以匹配电话号码的正则表达式也要年年更新.

    ^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$这个正则表达式我测试过了还没发现有匹配不了的号码,在这里分享给大家用!

    展开全文
  • 在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。...这里就罗列了从网上找的很有用的资料,感谢大神...匹配9-15个由字母/数字组成的字符串的正则表达式: NSString * regex

          在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。之前在用java时特别是对用户名或密码使用正则非常爽,写 脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够。这里就罗列了从网上找的很有用的资料,感谢大神们的贡献。

    首先举一个例子: 
    匹配9-15个由字母/数字组成的字符串的正则表达式:

    NSString * regex = @"^[A-Za-z0-9]{9,15}$";
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];

    假如是在OC里用,一定要注意细节。

    列出我在项目中用到的代码:

    复制代码
    NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    
    
    
    if(![pred evaluateWithObject: nickNameTextField.text])
        {
            /*
             ////此动画为弹出buttonqww
            UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"昵称只能由中文、字母或数字组成" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
            [alertView show];
            return;
             */
            
            Warning_boxes *reminderView = [[Warning_boxes alloc]init];
            [self.view addSubview:reminderView];
            reminderView.title_alter.text = @"昵称只能由中文、字母或数字组成";
            [reminderView animationStart];
            [reminderView release];
            
            /*
             //此动画为在顶上显示文字
            [MPNotificationView notifyWithText:@"昵称只能由中文、字母或数字组成"
                                   andDuration:0.5];
             */
            return;
    复制代码

    下一行代码非常关键:

    if(![pred evaluateWithObject: nickNameTextField.text])

    这里有 ! 一定要注意。因为nickNameTextField.text和pred匹配的时候返回的是YES。所以在判断他们匹配时的情况要加 ! 。


    要学好正则的小伙伴,强烈推荐: 正则表达式30分钟入门教程

    说 明:正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上 此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自 行处理。

    说明 正则表达式
    网址(URL) [a-zA-z]+://[^\s]*
    IP地址(IP Address) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
    电子邮件(Email) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    QQ号码 [1-9]\d{4,}
    HTML标记(包含内容或自闭合) <(.*)(.*)>.*<\/\1>|<(.*) \/>
    密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
    日期(年-月-日) (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
    日期(月/日/年) ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
    时间(小时:分钟, 24小时制) ((1|0?)[0-9]|2[0-3]):([0-5][0-9])
    汉字(字符) [\u4e00-\u9fa5]
    中文及全角标点符号(字符) [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
    中国大陆固定电话号码 (\d{4}-|\d{3}-)?(\d{8}|\d{7})
    中国大陆手机号码 1\d{10}
    中国大陆邮政编码 [1-9]\d{5}
    中国大陆身份证号(15位或18位) \d{15}(\d\d[0-9xX])?
    非负整数(正整数或零) \d+
    正整数 [0-9]*[1-9][0-9]*
    负整数 -[0-9]*[1-9][0-9]*
    整数 -?\d+
    小数 (-?\d+)(\.\d+)?
    不包含abc的单词 \b((?!abc)\w)+\b

    正则表达式 :是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。

    下面我们来看看一些基本的正则表达式的语法:

    \:将下个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符例如“\n”就是匹配一个换行符。

    ^:匹配开始位置,^(a)这个就匹配开头必须为a。

    $:匹配结束位置,$(a)这个就匹配结尾必须为a。

    *:匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”。

    +:匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别。

    ?:匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。

    {n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。

    {n,}:n是一个非负数,匹配至少n次。

    {n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。

    (pattern):匹配pattern并获取匹配结果。

    (?:pattern):匹配pattern但不获取匹配结果。

    x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。

    [xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。

    [^xyz]:匹配未被包含的字符。

    [a-z]:字符范围,匹配指定范围内的任意字符。

    [^a-z]:匹配指定不在范围内的任意字符。

    \b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。

    \B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。

    \d:匹配一个数字字符,等价于“[0-9]”。

    \D:匹配一个非数字字符。

    \f:匹配一个换页符。

    \n:匹配一个换行符。

    \r:匹配一个回车符。

    \s:匹配任何空白字符

    其实还有很多语法我就不一一列举了,先说这么多先


    一.NSString自带的正则查找,替换方法

    正则查找方法 
    – rangeOfString:options: 
    – rangeOfString:options:range: 
    – rangeOfString:options:range:locale:

    正则替换方法 
    – stringByReplacingOccurrencesOfString:withString:options:range:

    options参数指定搜索选项,类型为 NSStringCompareOptions ,可通过位或操作指定为 NSCaseInsensitiveSearch ,  NSLiteralSearch ,  NSBackwardsSearch , NSAnchoredSearch >等选项的组合。 
    若指定的选项为 NSRegularExpressionSearch ,则搜索字符串被认为是ICU兼容的正则表达式,如果指定了此选项,则与其可以同时存在的选项只有NSCaseInsensitiveSearch 和 NSAnchoredSearch

    二.使用 RegexKitLite

    RegexKitLite向标准NSString类增加了很多方法来使用正则表达式,RegexKitLite使用iOS系统自带的ICU( International Components for Unicode )正则引擎处理正则表达式,所以RegexKitLite使用的正则语法为ICU的语法,使用RegexKitLite需要导入libicucore.dylib库。

    使用RegexKitLite的方法很简单,将RegexKitLite.h和RegexKitLite.m加入到工程,然后引入libicucore.dylib库即可。 
    RegexKitLite.h   RegexKitLite.m

    RegexKitLit NSString方法参考 
    RegexKitLite NSString Additions Reference

    RegexKitLite的使用说明见: 
    Using RegexKitLite

    ICU正则语法为: 
    ICU Syntax 
    ICU User Guide – Regular Expressions

    三.使用 RegexKit.framework 框架

    RegexKit Framework与RegexKitLite来自同一体系,但其更复杂和强大。RegexKit Framework不使用iOS系统的ICU正则库,而是自带 PCRE( Perl Compatible Regular Expressions )库, 所以其正则语法是PCRE的语法。

    RegexKit Framework功能很强大,其向NSArray,NSData,NSDictionary,NSSet和NSString对象增加了正则表达式的支持。

    TRegexKit.framework与 RegexKit Lite 的区别

    RegexKit.framework RegexKit Lite
    Regex Library PCRE ICU
    Library Included Yes, built into framework object file. No, provided by  Mac OS X.
    Library Linked As Statically linked into framework. Dynamically linked to/usr/lib/libicucore.dylib.
    Compiled Size Approximately  371KB  per architecture. Very small, approximately  16KB—20KB   per architecture.
    Style External, linked to framework. Compiled directly in to final executable.
    Feature Set Large, with additions to many classes. Minimal,  NSString  only.

    四.常用ICU正则匹配模式

    常用的ICU正则匹配模式见: 
    RegexKitLite Cookbook

    Description Regex Examples
    Integer [+\-]?[0-9]+ 123 -42 +23
    Hex Number 0[xX][0-9a-fA-F]+ 0×0 0xdeadbeef0xF3
    Floating Point [+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.) 123. .123 +.42
    Floating Point with Exponent [+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.)(?:[eE][+\-]?[0-9]+)? 123. .123 10.0E131.23e-7
    Comma Separated Number [0-9]{1,3}(?:,[0-9]{3})* 42 1,234 1,234,567
    Comma Separated Number [0-9]{1,3}(?:,[0-9]{3})*(?:\.[0-9]+)? 42 1,2341,234,567.89

    文本文件 Text Files

    Description Regex
    Empty Line (?m:^$)
    Empty or Whitespace Only Line (?m-s:^\s*$)
    Strip Leading Whitespace (?m-s:^\s*(.*?)$)
    Strip Trailing Whitespace (?m-s:^(.*?)\s*$)
    Strip Leading and Trailing Whitespace (?m-s:^\s*(.*?)\s*$)
    Quoted String, Can Span Multiple Lines, May Contain \" "(?:[^"\\]*+|\\.)*"
    Quoted String, Single Line Only, May Contain \" "(?:[^"\\\r\n]*+|\\[^\r\n])*"
    HTML Comment (?s:<--.*?-->)
    Perl / Shell Comment (?m-s:#.*$)
    C, C++, or ObjC Comment (?m-s://.*$)
    C, C++, or ObjC Comment and Leading Whitespace (?m-s:\s*//.*$)
    C, C++, or ObjC Comment (?s:/\*.*?\*/)

    网络与URL相关 Network and URL

    Description Regex
    HTTP \bhttps?://[a-zA-Z0-9\-.]+(?:(?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
    HTTP \b(https?)://([a-zA-Z0-9\-.]+)((?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
    HTTP \b(https?)://(?:(\S+?)(?::(\S+?))?@)?([a-zA-Z0-9\-.]+)(?::(\d+))?((?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
    E-Mail \b([a-zA-Z0-9%_.+\-]+)@([a-zA-Z0-9.\-]+?\.[a-zA-Z]{2,6})\b
    Hostname \b(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}?[a-zA-Z0-9]\.)+[a-zA-Z]{2,6}\b
    IP \b(?:\d{1,3}\.){3}\d{1,3}\b
    IP with Optional Netmask \b((?:\d{1,3}\.){3}\d{1,3})(?:/(\d{1,2}))?\b
    IP or Hostname \b(?:(?:\d{1,3}\.){3}\d{1,3}|(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}?[a-zA-Z0-9]\.)+[a-zA-Z]{2,6})\b

    五.贪婪匹配与最小匹配

    在正则表达式中单独使用*或+时,默认是匹配尽可能多的数据,即贪婪匹配。

    *	Match zero or more times. Match as many times as possible.
    +	Match one or more times. Match as many times as possible.

    比如对 abcdefgabcdefg 使用abc(.*)g进行匹配,则捕获到到的数据为 defgabcdef。
    若只想捕获到第一个g,即只想得到def,则需要使用最小匹配,在*或+后面加上?,即使用abc(.*?)g进行匹配。

    *?	Match zero or more times. Match as few times as possible.
    +?	Match one or more times. Match as few times as possible.

    另外,在正则中用(…)包含内容是要捕获的数据,如果只要用(…)来引用group而不想捕获则可使用(?:…)。

    (…)	Capturing parentheses. Range of input that matched the parenthesized subexpression is available after the match.
    
    (?:…)	Non-capturing parentheses. Groups the included pattern, but does not provide capturing of matching text. Somewhat more efficient than capturing parentheses.

    六.正则表达式书写格式

    在书写正则表达式时,需要将\进行转义,即写成两个\\。 
    例如 匹配IP地址的正则表达式为 \b(?:\d{1,3}\.){3}\d{1,3}\b,则在实际书写时则为

    
    NSString *regex = @"\\b(?:\\d{1,3}\.){3}\\d{1,3}\\b";

    参考: 
    iOS 开发中使用正则表达式-暨 RegexKitLite 库的用法 
    RegexKitLite Documentation 
    [perl]理解贪婪匹配和最小匹配之间的区别 
    NSString Class Reference 
    ICU – International Components for Unicode

    来源: http://blog.csdn.net/zeng11088/article/details/8766121


    常用的第三方正则库:

    http://regexkit.sourceforge.net/RegexKitLite/index.html


    匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 
    匹配双字节字符(包括汉字在内):[^\x00-\xff] 
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 
    匹配空白行的正则表达式:\n\s*\r 
    评注:可以用来删除空白行 
    匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 
    匹配首尾空白字符的正则表达式:^\s*|\s*$ 
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 
    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
    评注:表单验证时很实用 
    匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求 
    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
    评注:表单验证时很实用 
    匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 
    评注:匹配形式如 0511-4405222 或 021-87888822 
    匹配腾讯QQ号:[1-9][0-9]{4,} 
    评注:腾讯QQ号从10000开始 
    匹配中国邮政编码:[1-9]\d{5}(?!\d) 
    评注:中国邮政编码为6位数字 
    匹配身份证:\d{15}|\d{18} 
    评注:中国的身份证为15位或18位 
    匹配ip地址:\d+\.\d+\.\d+\.\d+ 
    评注:提取ip地址时有用 
    匹配特定数字: 
    ^[1-9]\d*$ //匹配正整数 
    ^-[1-9]\d*$ //匹配负整数 
    ^-?[1-9]\d*$ //匹配整数 
    ^[1-9]\d*|0$ //匹配非负整数(正整数 + 0) 
    ^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0) 
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数 
    ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数 
    ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数 
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0) 
    ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0) 
    评注:处理大量数据时有用,具体应用时注意修正 
    匹配特定字符串: 
    ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 
    ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 
    ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 
    ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 
    ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串


    来源: http://www.cnblogs.com/xujh/archive/2008/08/21/1273525.html

    <input   οnkeypress="return   /[\w\u4e00-\u9fa5]/.test(String.fromCharCode(window.event.keyCode))"   
          οnpaste="return   !/[^\w\u4e00-\u9fa5]/g.test(window.clipboardData.getData('Text'))"   
          οndragenter="return   false"/>

    再粘贴一些别人写的。

    1.只能输入数字和英文的:  
    <input οnkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1"> 
    2.只能输入数字的:  
    <input οnkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2"> 
    3.只能输入全角的:  
    <input οnkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3"> 
    4.只能输入汉字的:  
    <input οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4"> 
    5.邮件地址验证: 
    var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$" 
    var re = new RegExp(regu); 
    if (s.search(re) != -1) { 
    return true; 
    } else { 
    window.alert ("请输入有效合法的E-mail地址 !") 
    return false; 

    6.身份证: 
    "^\\d{17}(\\d|x)$" 
    7.17种正则表达式 
    "^\\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 
    ============================================= 
    1.取消按钮按下时的虚线框  
    在input里添加属性值  hideFocus 或者 HideFocus=true  
       
    2.只读文本框内容  
      在input里添加属性值  readonly  
       
    3.防止退后清空的TEXT文档(可把style内容做做为类引用)  
    <INPUT style=behavior:url(#default#savehistory); type=text id=oPersistInput>  
       
    4.ENTER键可以让光标移到下一个输入框  
    <input οnkeydοwn="if(event.keyCode==13)event.keyCode=9" >  
       
    5.只能为中文(有闪动)  
    <input οnkeyup="value="/value.replace(/[" -~]/g,’’)" οnkeydοwn="if(event.keyCode==13)event.keyCode=9">  
       
    6.只能为数字(有闪动)  
    <input οnkeyup="value="/value.replace(/["^\d] /g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))">  
       
    7.只能为数字(无闪动)  
    <input ime- mode:disabled" οnkeydοwn="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false">  
       
    8.只能输入英文和数字(有闪动)  
    <input οnkeyup="value="/value.replace(/[\W] /g,"’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))">  
       
    9.屏蔽输入法  
    <input type="text" name="url" ime-mode:disabled" οnkeydοwn="if(event.keyCode==13)event.keyCode=9">  
       
    10. 只能输入 数字,小数点,减号(-) 字符(无闪动)  
    <input onKeyPress="if (event.keyCode!=46 && amp; event.keyCode!=45 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false">  
       
    11. 只能输入两位小数,三位小数(有闪动)  
    <input maxlength=9 οnkeyup="if(value.match(/^\d{3}$/))value=" /value.replace(value,parseInt(value/10))" ;value="/value.replace(/\.\d*\./g,’."’)" onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 && event.keyCode!=45 || value.match(/^\d{3}$/) || /\.\d{3}$/.test(value)) {event.returnValue=false}" id=text_kfxe name=text_kfxe> 


    javascript正则表达式使用详解

    简介

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 
    测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 
    替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
    根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

    基本语法

    在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。 
    正则表达式的形式一般如下:

    /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间 即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来 规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。 
    较为常用的元字符包括: “+”, “*”,以及 “?”。

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

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

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

    下面,就让我们来看一下正则表达式元字符的具体应用。

    /fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

    /eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

    /Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

    有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

    {n,} n 是一个非负整数。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。 
    在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

    代码
    1. \s:用于匹配单个空格符,包括tab键和换行符;    
    2. \S:用于匹配除单个空格符之外的所有字符;    
    3. \d:用于匹配从 0 到 9 的数字;    
    4. \w:用于匹配字母,数字或下划线字符;    
    5. \W:用于匹配所有与\w不匹配的字符;    
    6. . :用于匹配除换行符之外的所有字符。    
    (说明:我们可以把\s和\S以及\w和\W看作互为逆运算) 
    下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。 
    /\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 
    /\d000/ 如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。 
    除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
    代码
    1. “^”定位符规定匹配模式必须出现在目标字符串的开头   
    2. “$”定位符规定匹配模式必须出现在目标对象的结尾   
    3. “\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一   
    4. “\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,   
    5.       即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。   
    同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说: /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。 
    为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
    代码
    1. /[A-Z]/ 上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。   
    2. /[a-z]/ 上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。    
    3. /[ 0 - 9 ]/  上述正则表达式将会与从 0 到 9 范围内任何一个数字相匹配。    
    4. /([a-z][A-Z][ 0 - 9 ])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。   
    这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。 
    如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。 
    正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/ 上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般 来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。 
    最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/ 上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。 
    在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:
    代码
    1. 1 .\ 转义符   
    2. 2 .(), (?:), (?=), [] 圆括号和方括号   
    3. 3 .*, +, ?, {n}, {n,}, {n,m} 限定符   
    4. 4 .^, $, \anymetacharacter 位置和顺序   
    5. 5 .|“或”操作   

    使用实例 
    在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。 
    我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

    代码
    1. < html >     
    2. < head >     
    3.   < script   language = "Javascript1.2" >     
    4.  <!-- start hiding    
    5.  function verifyAddress(obj)    
    6. {    
    7. var  email  =  obj .email.value;    
    8. var  pattern  =    
    9. /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;    
    10. flag  =  pattern .test(email);    
    11. if(flag)    
    12. {    
    13. alert(“Your email address is correct!”);    
    14. return true;    
    15. }    
    16. else    
    17. {    
    18. alert(“Please try again!”);    
    19. return false;    
    20.  }    
    21.  }    
    22.  // stop hiding -- >     
    23.   </ script >     
    24. </ head >     
    25.   < body >     
    26.   < form   onSubmit = "return verifyAddress(this);" >     
    27.   < input   name = "email"   type = "text" >     
    28.   < input   type = "submit" >     
    29.   </ form >     
    30. </ body >     
    31. </ html >     

    正则表达式对象 
    本对象包含正则表达式模式以及表明如何应用模式的标志。

    代码
    1. 语法  1  re = /pattern/[flags]   
    2. 语法  2  re =  new  RegExp( "pattern" ,[ "flags" ])    
    参数 
    re 
    必选项。将要赋值为正则表达式模式的变量名。

    Pattern 
    必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。

    Flags 
    可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用,可用的有:

    代码
    1. g (全文查找出现的所有 pattern)    
    2. i (忽略大小写)    
    3. m (多行查找)    

    示例 
    下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于 match 方法中:

    代码
    1. function MatchDemo()   
    2. {   
    3. var r, re;  // 声明变量。   
    4. var s =  "The rain in Spain falls mainly in the plain" ;   
    5. re =  new  RegExp( "ain" , "g" );  // 创建正则表达式对象。   
    6. r = s.match(re);  // 在字符串 s 中查找匹配。   
    7. return (r);    
    8. }   

    返回值: ain,ain,ain,ain\\ 
    属性 lastIndex 属性 | source 属性\\ 
    方法 compile 方法 | exec 方法 | test 方法\\ 
    要求 版本 3\\ 
    请参阅 RegExp 对象 | 正则表达式语法 | String 对象\\

    exec 方法 
    用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。 
    rgExp.exec(str)

    参数

    rgExp 
    必选项。包含正则表达式模式和可用标志的正则表达式对象。

    str 
    必选项。要在其中执行查找的 String 对象或字符串文字。

    说明\\ 
    如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。 
    如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

    exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

    示例\\ 
    下面的例子举例说明了 exec 方法的用法:

    代码
    1. function RegExpTest()   
    2. {   
    3. var ver = Number(ScriptEngineMajorVersion() +  "." + ScriptEngineMinorVersion())   
    4. if  (ver >=  5.5 ){  // 测试 JScript 的版本。   
    5. var src =  "The rain in Spain falls mainly in the plain." ;   
    6. var re = /\w+/g;  // 创建正则表达式模式。   
    7. var arr;   
    8. while  ((arr = re.exec(src)) !=  null )   
    9. document.write(arr.index +  "-"  + arr.lastIndex + arr +  "\t" );   
    10. }   
    11. else {   
    12. alert( "请使用 JScript 的更新版本" );   
    13. }   
    14. }   

    返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain

    test 方法\\ 
    返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。 
    rgexp.test(str)

    参数\\ 
    rgexp 
    必选项。包含正则表达式模式或可用标志的正则表达式对象。

    str 
    必选项。要在其上测试查找的字符串。

    说明 
    test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。 
    全局 RegExp 对象的属性不由 test 方法来修改。

    示例 
    下面的例子举例说明了 test 方法的用法:

    代码
    1. function TestDemo(re, s)   
    2. {   
    3. var s1;  // 声明变量。   
    4. // 检查字符串是否存在正则表达式。   
    5. if  (re.test(s))  // 测试是否存在。   
    6. s1 =  " contains " ;  // s 包含模式。   
    7. else   
    8. s1 =  " does not contain " ;  // s 不包含模式。   
    9. return ( "'"  + s +  "'"  + s1 +  "'" + re.source +  "'" );  // 返回字符串。   
    10. }   

    函数调用:document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));

    返回值:'The rain in Spain falls mainly in the plain.' contains 'ain+'

    match 方法 
    使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。\\ 
    stringObj.match(rgExp)

    参数\\ 
    stringObj 
    必选项。对其进行查找的 String 对象或字符串文字。

    rgExp 
    必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。

    说明\\ 
    如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 
    match 方法返回的数组有三个属性:input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。 
    如果没有设置全局标志 (g),数组的 0 元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。

    示例\\ 
    下面的示例演示了match 方法的用法:

    代码
    1. function MatchDemo()   
    2. {   
    3. var r, re;  // 声明变量。   
    4. var s =  "The rain in Spain falls mainly in the plain" ;   
    5. re = /ain/i;  // 创建正则表达式模式。   
    6. r = s.match(re);  // 尝试匹配搜索字符串。   
    7. return (r);  // 返回第一次出现 "ain" 的地方。   
    8. }   
    返回值:ain

    本示例说明带 g 标志设置的 match 方法的用法。

    代码
    1. function MatchDemo()   
    2. {   
    3. var r, re;  // 声明变量。   
    4. var s =  "The rain in Spain falls mainly in the plain" ;   
    5. re = /ain/ig;  // 创建正则表达式模式。   
    6. r = s.match(re);  // 尝试去匹配搜索字符串。   
    7. return (r);  // 返回的数组包含了所有 "ain"    
    8. // 出现的四个匹配。   
    9. }   
    返回值:ain,ain,ain,ain

    上面几行代码演示了字符串文字的 match 方法的用法。

    代码
    1. var r, re =  "Spain" ;   
    2. r =  "The rain in Spain" .replace(re,  "Canada" );   
    3. return  r;   
    返回值:The rain in Canada

    search 方法 
    返回与正则表达式查找内容匹配的第一个子字符串的位置。

    stringObj.search(rgExp)

    参数\\ 
    stringObj 
    必选项。要在其上进行查找的 String 对象或字符串文字。

    rgExp 
    必选项。包含正则表达式模式和可用标志的正则表达式对象。

    说明

    search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。

    示例\\ 
    下面的示例演示了 search 方法的用法。

    代码
    1. function SearchDemo()   
    2. {   
    3. var r, re;  // 声明变量。   
    4. var s =  "The rain in Spain falls mainly in the plain." ;   
    5. re = /falls/i;  // 创建正则表达式模式。   
    6. r = s.search(re);  // 查找字符串。   
    7. return (r);  // 返回 Boolean 结果。   
    8. }   
    返回值:18

    正则表达式语法 
    一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    这里有一些可能会遇到的正则表达式示例:

    代码
    1. JScript VBScript 匹配    
    2. /^\[ \t]*$/  "^\[ \t]*$"  匹配一个空白行。    
    3. /\d{ 2 }-\d{ 5 }/  "\d{2}-\d{5}"  验证一个ID 号码是否由一个 2 位数字,一个连字符以及一个 5 位数字组成。    
    4. /<(.*)>.*<\/\ 1 >/  "<(.*)>.*<\/\1>"  匹配一个 HTML 标记。    

    下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

    字符 描述 
    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

    $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。

    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

    ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

    {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

    . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 
    (pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。

    (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

    (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

    (?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

    x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

    [xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

    [^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

    [a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

    [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

    \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

    \B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

    \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

    \d 匹配一个数字字符。等价于 [0-9]。

    \D 匹配一个非数字字符。等价于 [^0-9]。

    \f 匹配一个换页符。等价于 \x0c 和 \cL。

    \n 匹配一个换行符。等价于 \x0a 和 \cJ。

    \r 匹配一个回车符。等价于 \x0d 和 \cM。

    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

    \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

    \t 匹配一个制表符。等价于 \x09 和 \cI。

    \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

    \w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

    \W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

    \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.

    \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

    \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

    \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

    \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

    \un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

    优先权顺序 
    在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。

    下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:

    代码
    1. 操作符 描述    
    2. \ 转义符    
    3. (), (?:), (?=), [] 圆括号和方括号    
    4. *, +, ?, {n}, {n,}, {n,m} 限定符    
    5. ^, $, \anymetacharacter 位置和顺序    
    6. | “或”操作    

    普通字符

    普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。

    最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例:

    代码
    1. /a/   
    2. / 7 /   
    3. /M/   
    等价的 VBScript 单字符正则表达式为:
    代码
    1. "a"   
    2. "7"   
    3. "M"   
    可以将多个单字符组合在一起得到一个较大的表达式。例如,下面的 JScript 正则表达式不是别的,就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。

    /a7M/ 
    等价的 VBScript 表达式为:

    "a7M" 
    请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面

    转: http://www.cnblogs.com/heyonggang/p/3476885.html

    展开全文
  • iOS小demo之数字和字母的正则判断

    千次阅读 2018-05-29 09:31:08
    NSString * regex = @"^[A-Za-z0-9]+$";NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];BOOL isMatch = [pred evaluateWithObject:devicenote];

    NSString * regex = @"^[A-Za-z0-9]+$";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    BOOL isMatch = [pred evaluateWithObject:devicenote];


    展开全文
  • iOS中的正则表达式运用

    千次阅读 2016-05-11 20:56:26
    、什么是正则表达式  正则表达式,又称正规表示法,是对字符串操作的种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速地用极简单的...

    一、什么是正则表达式

      正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速地用极简单的方式达到字符串的复杂控制。


     二、正则表达式的语法

      看一个过滤纯数字的例子

    - (BOOL)validateNumber:(NSString *) textString
    {
        NSString* number=@"^[0-9]+$";
        NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
        return [numberPre evaluateWithObject:textString];
    }

      其中下述语句就是一个正则表达式

    @"^[0-9]+$"

      它代表了字符串中只能包含>=1个0-9的数字,语法是不是有一些怪异?

      下面我们先撇开iOS中的正则表达式的语法,用通俗的正则表达式语法来为介绍一下。(iOS语法与通俗的正则表达式语法相同,不同在于对转义字符的处理上(语言类的都相同))

      语法:

      首先,特殊符号’^'和’$'。他们的作用是分别指出一个字符串的开始和结束。eg:

      “^one”:表示所有以”one”开始的字符串(”one cat”,”one123″,·····);

      类似于:- (BOOL)hasPrefix:(NSString *)aString;

      “a dog$”:表示所以以”a dog”结尾的字符串(”it is a dog”,·····);

      类似于:- (BOOL)hasSuffix:(NSString *)aString;

      “^apple$”:表示开始和结尾都是”apple”的字符串,这个是唯一的~;

      “banana”:表示任何包含”banana”的字符串。

      类似于 iOS8的新方法- (BOOL)containsString:(NSString *)aString,搜索子串用的。

      ‘*’,’+'和’?'这三个符号,表示一个或N个字符重复出现的次数。它们分别表示“没有或更多”([0,+∞]取整),“一次或更多”([1,+∞]取整),“没有或一次”([0,1]取整)。下面是几个例子:

      “ab*”:表示一个字符串有一个a后面跟着零个或若干个b(”a”, “ab”, “abbb”,……);

      “ab+”:表示一个字符串有一个a后面跟着至少一个b或者更多( ”ab”, “abbb”,……);

      “ab?”:表示一个字符串有一个a后面跟着零个或者一个b( ”a”, “ab”);

      “a?b+$”:表示在字符串的末尾有零个或一个a跟着一个或几个b( ”b”, “ab”,”bb”,”abb”,……)。

      可以用大括号括起来({}),表示一个重复的具体范围。例如

      “ab{4}”:表示一个字符串有一个a跟着4个b(”abbbb”);

      “ab{1,}”:表示一个字符串有一个a跟着至少1个b(”ab”,”abb”,”abbb”,……);

      “ab{3,4}”:表示一个字符串有一个a跟着3到4个b(”abbb”,”abbbb”)。

      那么,“*”可以用{0,}表示,“+”可以用{1,}表示,“?”可以用{0,1}表示

      注意:可以没有下限,但是不能没有上限!例如“ab{,5}”是错误的写法

      “ | ”表示“或”操作:

      “a|b”:表示一个字符串里有”a”或者”b”;

      “(a|bcd)ef”:表示”aef”或”bcdef”;

      “(a|b)*c”:表示一串”a”"b”混合的字符串后面跟一个”c”;

      方括号”[ ]“表示在括号内的众多字符中,选择1-N个括号内的符合语法的字符作为结果,例如

      “[ab]“:表示一个字符串有一个”a”或”b”(相当于”a|b”);

      “[a-d]“:表示一个字符串包含小写的’a'到’d'中的一个(相当于”a|b|c|d”或者”[abcd]“);

      “^[a-zA-Z]“:表示一个以字母开头的字符串;

      “[0-9]a”:表示a前有一位的数字;

      “[a-zA-Z0-9]$”:表示一个字符串以一个字母或数字结束。

      “.”匹配除“\r\n”之外的任何单个字符:

      “a.[a-z]“:表示一个字符串有一个”a”后面跟着一个任意字符和一个小写字母;

      “^.{5}$”:表示任意1个长度为5的字符串;

      “\num” 其中num是一个正整数。表示”\num”之前的字符出现相同的个数,例如

      “(.)\1″:表示两个连续的相同字符。

      “10\{1,2\}” : 表示数字1后面跟着1或者2个0 (“10″,”100″)。

      ” 0\{3,\} ” 表示数字为至少3个连续的0 (“000”,“0000”,······)。

      在方括号里用’^'表示不希望出现的字符,’^'应在方括号里的第一位。

      “@[^a-zA-Z]4@”表示两个”@”中不应该出现字母)。

      常用的还有:

      “ \d ”匹配一个数字字符。等价于[0-9]。

      “ \D”匹配一个非数字字符。等价于[^0-9]。

      “ \w ”匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。

      “ \W ”匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。

      iOS中书写正则表达式,碰到转义字符,多加一个“\”,例如:

      全数字字符:@”^\\d\+$”

     三、iOS中正则表达式

      1.正则表达式与NSPredicate连用,eg:

    - (BOOL)validateNumber:(NSString *) textString
    {
        NSString* number=@"^[0-9]+$";
        NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
        return [numberPre evaluateWithObject:textString];
    }

      2.NSString方法

      - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;

    NSString *searchText = @"rangeOfString";
    NSRange range = [searchText rangeOfString:@"^[0-9]+$" options:NSRegularExpressionSearch];
    if (range.location != NSNotFound) {
       NSLog(@"range :%@", [searchText substringWithRange:range]);
    }

      3.正则表达式类(NSRegularExpression)

    NSString *searchText = @"you want to match";    
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]+$" options:NSRegularExpressionCaseInsensitive error:&error];
    NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
    if (result) {
       NSLog(@"%@", [searchText substringWithRange:result.range]);
    }

     四、常用的正则表达式

      以下红色字符串是常用的正则表达式(以下正则表达式来自百度百科)

      1.验证用户名和密码:”^[a-zA-Z]\w{5,15}$”

      2.验证电话号码:(”^(\\d{3,4}-)\\d{7,8}$”)

      eg:021-68686868  0511-6868686;

      3.验证手机号码:”^1[3|4|5|7|8][0-9]\\d{8}$”;

      4.验证身份证号(15位或18位数字):”\\d{14}[[0-9],0-9xX]”;

      5.验证Email地址:(“^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$”);

      6.只能输入由数字和26个英文字母组成的字符串:(“^[A-Za-z0-9]+$”) ;

      7.整数或者小数:^[0-9]+([.]{0,1}[0-9]+){0,1}$

      8.只能输入数字:”^[0-9]*$”。

      9.只能输入n位的数字:”^\\d{n}$”。

      10.只能输入至少n位的数字:”^\\d{n,}$”。

      11.只能输入m~n位的数字:”^\\d{m,n}$”。

      12.只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。

      13.只能输入有两位小数的正实数:”^[0-9]+(.[0-9]{2})?$”。

      14.只能输入有1~3位小数的正实数:”^[0-9]+(\.[0-9]{1,3})?$”。

      15.只能输入非零的正整数:”^\+?[1-9][0-9]*$”。

      16.只能输入非零的负整数:”^\-[1-9][]0-9″*$。

      17.只能输入长度为3的字符:”^.{3}$”。

      18.只能输入由26个英文字母组成的字符串:”^[A-Za-z]+$”。

      19.只能输入由26个大写英文字母组成的字符串:”^[A-Z]+$”。

      20.只能输入由26个小写英文字母组成的字符串:”^[a-z]+$”。

      21.验证是否含有^%&’,;=?$\”等字符:”[^%&',;=?$\x22]+”。

      22.只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”。

      23.验证URL:”^http://([\\w-]+\.)+[\\w-]+(/[\\w-./?%&=]*)?$”。

      24.验证一年的12个月:”^(0?[1-9]|1[0-2])$”正确格式为:”01″~”09″和”10″~”12″。

      25.验证一个月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为;”01″~”09″、”10″~”29″和“30”~“31”。

      26.获取日期正则表达式:\\d{4}[年|\-|\.]\\d{\1-\12}[月|\-|\.]\\d{\1-\31}日?

      评注:可用来匹配大多数年月日信息。

      27.匹配双字节字符(包括汉字在内):[^\x00-\xff]

      评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

      28.匹配空白行的正则表达式:\n\s*\r

      评注:可以用来删除空白行

      29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />

      评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

      30.匹配首尾空白字符的正则表达式:^\s*|\s*$

      评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

      31.匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*

      评注:网上流传的版本功能很有限,上面这个基本可以满足需求

      32.匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

      评注:表单验证时很实用

      33.匹配腾讯QQ号:[1-9][0-9]\{4,\}

      评注:腾讯QQ号从10 000 开始

      34.匹配中国邮政编码:[1-9]\\d{5}(?!\d)

      评注:中国邮政编码为6位数字

      35.匹配ip地址:((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)。

      下面给出正则表达式的元字符(来自百度百科)

     五、正则表达式中的元字符

     

    元字符 描述
    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。
    ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
    * 匹配前面的子表达式零次或多次(大于等于0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。
    + 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
    ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
    {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
    {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
    {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
    ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
    .点 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
    (pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
    (?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
    (?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
    (?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
    (?<=pattern) 反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
    (?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
    x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
    [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
    [^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
    [a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.
    [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    \b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
    \B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    \cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
    \d 匹配一个数字字符。等价于[0-9]。
    \D 匹配一个非数字字符。等价于[^0-9]。
    \f 匹配一个换页符。等价于\x0c和\cL。
    \n 匹配一个换行符。等价于\x0a和\cJ。
    \r 匹配一个回车符。等价于\x0d和\cM。
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
    \t 匹配一个制表符。等价于\x09和\cI。
    \v 匹配一个垂直制表符。等价于\x0b和\cK。
    \w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
    \W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    \xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。
    \num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
    \n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
    \nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
    \nml 如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
    \un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。
    \< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串”for the wise”中的”the”,但是不能匹配字符串”otherwise”中的”the”。注意:这个元字符不是所有的软件都支持的。
    \( \) 将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
    | 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配”it belongs to him”和”it belongs to her”,但是不能匹配”it belongs to them.”。注意:这个元字符不是所有的软件都支持的。
    + 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
    ? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
    {i} {i,j} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符”A”后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字
    展开全文
  • iOS正则表达式判断密码

    千次阅读 2015-04-28 09:49:17
    iOS 正则表达式 不能全部为数字 不能全部为字母 必须包含字母和数字 6-20 -(BOOL)checkPassWord { //6-20位数字和字母组成 NSString *regex = @"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$"; NSPredicate *...
  • ios 数字加字母正则表达式

    千次阅读 2017-07-28 17:43:34
    数字加字母正则 NSString *regex = @"\\d{0,}([a-z]{1,}\\d{1,}){1,}[a-z]{0,}"; regex = @"((?=.*\\d)(?=.*[a-zA-Z]))[\\da-zA-Z]*"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHE
  • 字符串的格式为:十二斤,五千克等,是数量+单位形式 替换完为:12斤,50千克等 不用考虑小数,但是要考虑零 C币不多了,求各位大神帮忙
  • 使用正则表达式匹配所输入的字符串是否是由数字和字母组成的内容(数字和字母至少各个),若不是则重新输入? 正则表达式能否控制字母和数字的顺序?
  • 大陆--护照正则表达式

    万次阅读 2015-04-25 00:30:06
    一位是字母,后面都是数字   P: P开头的是因公普通护照 D: 外交护照是D开头 E: 有电子芯片的普通护照为“E”字开头, S: 后接8位阿拉伯数字公务护照 G: 因私护照G开头 14: 15:   H:香港特区护照和香港公民所...
  • 关于软件版本号的正则,可以有字符数字.-最长40个字符。该怎么写。
  • [iOS]iOS 中正则表达式的使用

    万次阅读 2011-08-04 13:48:14
    iOS 中正则表达式的使用 iOS 中可以通过 NSPredicate 来处理正则表达式。相关资料如下: NSPredicate 苹果官方文档: http://developer.apple.com/documentation/Cocoa/Conceptual/Predic
  • 匹配11位手机号码的正则表达式

    万次阅读 2014-12-08 14:46:46
    最近在做个即时通讯的项目, 首先是注册登录界面, 项目需求是通过用户输入的手机号码获取个4位数的验证码来...判断手机号码是否正确的方法很多,我是用正则表达式来完成匹配的,废话不多说,直接上代码:  //正则表达
  • IOS系统不支持JS正则输入框 验证纯汉字输入 ios系统输入先在输入框呈现英文字母在转换成汉字 纯数字限限制可能会跳出Input输入框限制 出现isNaN();验证非数字类型 详细可参考 ... ...window.history.go(-1);...
  • js 正则表达式 判断全部的正数、负数、和小数 /^(\-|\+)?\d+(\.\d+)?$/ 例子 if ('' != value) { if (!/^(\-|\+)?\d+(\.\d+)?$/.test(value)) { return '请填写正确的数字'; } } ...
  • iOS-正则表达式匹配数字或网址

    千次阅读 2011-10-11 23:29:26
    啥也不说了,在iOS中使用正则表达式; -(void)parseString { //组装个字符串,需要把里面的网址解析出来 NSString *urlString=@"sfdsfhttp://www.baidu.com http://www.google.com 111
  • 根据正则生成随机数

    万次阅读 2019-01-09 11:14:33
    前几天项目测试时需要一下测试数据,但是这些数据又需要满足项目中的正则判断。于是我就在网上找到了个这样的jar。今天整理了出来以供大家使用和交流。 项目很简单,大家可以下载下来后直接使用eclipse或其他java ...
  • 博文转自:zhaojinqiang12的博客-iOS中的正则表达式运用,更加详细的内容请关注以上博文Thanks()什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的种逻辑公式。正则表达式可以检测给定的字符串是否...
  • 一直以为正则方括号内的短横线是要转义的,例: [a-z\-] 其实“-”在紧挨边界的时候不需要转义,也就是说可以写成: [a-z-] 或 [-a-z] 经过自己验证,我们暂且称“a-z”为“组”,结论是“在方括号边界或是组...
  • #pragma mark --密码同时包含6~18位数字和大小写字母,不包含特殊字符的判断方法(正则表达式) + (NSString *)isOrNoPasswordStyle:(NSString *)passWordName { NSString * message; if (passWordName....
  • 正则表达式之电话,邮箱,邮编篇

    万次阅读 2014-01-10 09:26:52
    正则表达式在web应用开发中必不可少的。当然网上也有很多正则式,只是不能达到预期要求。我写的这几个正则式都是我需要的。 首先看电话篇:电话分为座机,手机两种。 座机验证之正则式:/^((0\d{2,3})-)?(\d{7,8})...
1 2 3 4 5 ... 20
收藏数 6,435
精华内容 2,574
关键字:

11位数字正则表达式 ios