2016-11-18 3 views
2

Я хочу проверить строку, чтобы проверить, является ли она буквенно-цифровой и содержит «-» и «.». с буквенно-цифровыми символами. Так что я сделал что-то вроде этого, чтобы сформировать шаблон регулярного выраженияПодтвердить строку с помощью regex

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]; 

App происшествий о том, что шаблон регулярного выражения не может быть сформирован. Может ли кто-нибудь дать мне быстрый пример того, что я делаю неправильно? Заранее спасибо.

+1

Попробуйте выйти из тире, например: '[a-zA-Z0-9. \ -]' –

+0

Но. является метасимволом? –

+0

'-' в конце символьного класса не нужно экранировать. Регулярное выражение действительно. Однако для этой задачи я использовал бы '^ [a-zA-Z0-9 .-] + \\ z'. –

ответ

2

Вы должны передать переменную типа NSString в NSPredicateSELF МАТЧИ:

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 МАТЧИ (регулярное выражение привязаны по умолчанию), и вам нужно добавить +, чтобы соответствовать одному или нескольким символам, или *, чтобы соответствовать 0+ (чтобы также разрешить пустую строку).

Вам не нужно избегать дефиса в начале/конце класса символов, а точка внутри класса символов рассматривается как символ буквальной точки.

Кроме того, поскольку в шаблоне присутствуют как нижние, так и прописные ASCII-диапазоны букв, вам не нужно передавать флаги, нечувствительные к регистру, в регулярное выражение.

+0

Позвольте мне попробовать.! дайте мне секунду –

+1

Это было замечательно ..> !!!!!!! Принимая ответ.! –

Смежные вопросы