2016-05-28 3 views
1

В приведенном ниже методе я хочу проверить текст UITextField, если: содержит одно или несколько английских слов и одно или несколько номеров, а также необязательно содержит специальные символы (! @ $ & #) return true, else return false.Регулярные выражения в ios (слово буква и специальные символы)

#define pattern @"^[a-zA-Z0-9\\u0021\\u0040\\u0023\\u0024\\u0026]{1}*$" 

- (BOOL)stringHasCorrectFormat:(NSString *)str { 

     if ([str componentsSeparatedByString:SPACE].count > 1) 
     return NO; 
     NSString *regularPattern = EMPTY_STRING; 
     regularPattern = [regularPattern stringByAppendingString:pattern] 
     NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:regularPattern 
           options:NSRegularExpressionCaseInsensitive 
           error:nil]; 



     NSTextCheckingResult *match = [regex 
           firstMatchInString:str 
           options:0 
           range:NSMakeRange(0, [str length])]; 


    if (match != nil) { 
     return YES; 
    } 

    return NO; 
} 

благодаря

+0

, что ваша проблема? вам нужно показывать только слова или цифры? –

+0

На самом деле вы не допускаете 0 или более символов. Используйте '@"^[a-zA-Z0-9 \\ u0021 \\ u0040 \\ u0023 \\ u0024 \\ u0026] * $ "'. Если вы хотите убедиться, что есть буква и цифра, используйте '@"^(? = [^ A-zA-Z] * [a-zA-Z]) (? = \\ D * \\ d) [A-Za-Z0-9 \\ u0021 \\ u0040 \\ u0023 \\ u0024 \\ u0026] * $ "' –

ответ

3

Описание

^(?=.*[a-z])(?=.*[0-9])[[email protected]$&#]*$ 

Regular expression visualization

Это регулярное выражение будет делать следующее:

  • (?=.*[a-z]) Требовать й е строка содержит по крайней мере один a-z характер
  • (?=.*[0-9]) Требовать строку содержать, по меньшей мере, один 0-9 характер
  • [[email protected]$&#]*$ Разрешить строку состоять только из a-z символов, 0-9 символов и [email protected]$&# символов
Пример

Демо

https://regex101.com/r/mC3kL3/1

Объяснение

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    .*      any character except \n (0 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
    [a-z]     any character of: 'a' to 'z' 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    .*      any character except \n (0 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
    [0-9]     any character of: '0' to '9' 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
    [a-z0-9!&#]*    any character of: 'a' to 'z', '0' to '9', 
          '!', '&', '#' (0 or more times (matching 
          the most amount possible)) 
---------------------------------------------------------------------- 
    $      before an optional \n, and the end of a 
          "line" 
----------------------------------------------------------------------