首先舉一個例子:
匹配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:匹配任何空白字符
其實還有很多語法我就不一一列舉了,先說這么多先