[iOS] 正規表達式 (Regular Expression)

Posted in :

台灣的身份證字號 regular expression:

    NSString *errorMessage;
    // 確認身分證字號格式
    NSString *phoneNumber = @“L123456789";
    NSString *phoneRegex = @"[A-Z][0-9]{9}";
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    BOOL matches = [test evaluateWithObject:phoneNumber];
    if (!matches) {
        errorMessage = @"身份證字號第一碼英文+後9碼為數字";
    }

http://stackoverflow.com/questions/3349494/objective-c-regex-to-check-phone-number

How to validate a phone number (NSString *) in objective-c? Rules:

minimum 7 digits
maximum 10 digits
the first digit must be 2, 3, 5, 6, 8 or 9

You can use a regular expressions library (like RegexKit, etc), or you could use regular expressions through NSPredicate (a bit more obscure, but doesn’t require third-party libraries). That would look something like this:

NSString *phoneNumber = ...;
NSString *phoneRegex = @"[235689][0-9]{6}([0-9]{3})?"; 
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; 
BOOL matches = [test evaluateWithObject:phoneNumber];

If you’re on iPhone, then iOS 4 introduced NSRegularExpression, which would also work. The NSPredicate approach works on both Mac and iPhone (any version).


http://stackoverflow.com/questions/5478170/regular-expression-in-ios

I am looking for a regular expression to match the following -100..100:0.01. The meaning of this expression is that the value can increment by 0.01 and should be in the range -100 to 100.

You could use NSRegularExpression instead. It does support \b, btw, though you have to escape it in the string:

NSString *regex = @"\\b-?1?[0-9]{2}(\\.[0-9]{1,2})?\\b";

Though, I think \\W would be a better idea, since \\b messes up detecting the negative sign on the number.

A hopefully better example:

NSString *string = <...your source string...>;
NSError  *error  = NULL;

NSRegularExpression *regex = [NSRegularExpression 
  regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W"
                       options:0
                         error:&error];

NSRange range   = [regex rangeOfFirstMatchInString:string
                              options:0 
                              range:NSMakeRange(0, [string length])];
NSString *result = [string substringWithRange:range];

Email 格式檢查:

emailRegEx = “[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}”


首先,特殊符號’^’和’$’。他們的作用是分別指出一個字符串的開始和結束。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\+$」


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?)。


LIND ID Pattern:

@”[a-zA-Z0-9.\\-_]{4,20}”;


Compare function:

// Validate the input string with the given pattern and
// return the result as a boolean
- (BOOL)validateString:(NSString *)string withPattern:(NSString *)pattern
{
    NSError *error = nil;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
    
    NSAssert(regex, @"Unable to create regular expression");
    
    NSRange textRange = NSMakeRange(0, string.length);
    NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];
    
    BOOL didValidate = NO;
    
    // Did we find a matching range
    if (matchRange.location != NSNotFound)
        didValidate = YES;
    
    return didValidate;
}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *