2016-11-18 83 views
2

我想驗證一個字符串來檢查它是否是字母數字幷包含「 - 」和「。」。與字母數字字符。所以我做了這樣的事情,形成正則表達式模式使用正則表達式驗證字符串

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z0-9\\.\\-]" 
            options:NSRegularExpressionCaseInsensitive 
            error:&error]; 
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL valid = [regexTest evaluateWithObject:URL_Query]; 

應用程序崩潰,指出正則表達式模式不能形成。任何人都可以給我一個quickfix我做錯了什麼?提前致謝。

+1

嘗試轉義破折號,如下所示:'[a-zA-Z0-9。\ - ]' –

+0

但是。是元字符? –

+0

在角色等級末尾的'-'不必轉義。正則表達式是有效的。但是,我會爲此任務使用'^ [a-zA-Z0-9 .-] + \\ z'。 –

回答

2

您必須NSString類型的變量傳遞給NSPredicateSELF MATCHES

NSString * URL_Query = @"PAS.S.1-23-"; 
NSString * regex = @"[a-zA-Z0-9.-]+"; 
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL valid = [regexTest evaluateWithObject:URL_Query]; 

Objective C demo

請注意,您不需要錨與SELF MATCHES(正則表達式是默認爲錨定),您需要添加+以匹配一個或多個允許符號,或者*匹配0+(以允許空字符串)。

您不需要在字符類的開始/結尾處轉義連字符,並且字符類中的點被視爲文字點字符。

此外,由於模式中存在大寫和小寫ASCII字母範圍,因此不需要將任何不區分大小寫的標誌傳遞給正則表達式。

+0

讓我試試。給我第二個 –

+1

那真是美妙..> !!!!!!!接受答案! –

相關問題