一个正则表达式测试(只可输入中文、字母和数字)

时间秒杀一切 提交于 2020-02-13 01:59:57

首先举一个例子: 
匹配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:匹配任何空白字符

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!