2015-02-02 2 views
1

После того, как текстовое поле возвращается, я хочу проверить, действительно ли текст предоставлен. Действительный означает только буквы или один апостроф для имен.Регулярное выражение в iOS для ограничения текстового поля только на буквы и одиночные апострофии

Я довольно новичок в регулярных выражениях. Есть ли простое регулярное выражение, которое я могу использовать для этой проверки, или кто-то может указать мне на некоторые материалы для чтения, где я могу научиться составлять регулярное выражение, соответствующее моим потребностям?

+0

поделиться некоторым конкретным примером, чтобы иметь четкое представление ... –

+0

Какая часть нуждается в уточнении? Фрагмент кода не вписывался бы в вопрос, как и все, кроме бит, о котором я спрашиваю, что это не имеет значения. Если это бит апострофа, то пример приемлемой записи будет O'Dowed, но неприемлемая запись будет O''Dowed. – Tiddly

ответ

2

Вы можете сделать это так, но вы должны показать ошибку в случае, если входной сигнал является инвалид.

- (BOOL)textFieldShouldEndEditing:(UITextField *)aTextField 
{ 
    NSString *const regularExpression = @"^[a-zA-Z']+$"; 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression 
                      options:kNilOptions 
                      error:&error]; 
    if (error) { 
     // Handle error 
    } 

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:aString 
                 options:0 
                  range:NSMakeRange(0, [aString length])]; 
    return numberOfMatches > 0; 
} 
0

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

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

    NSMutableCharacterSet *allowedCharacters = [NSMutableCharacterSet alphanumericCharacterSet]; 
    [allowedCharacters addCharactersInString:@"'"]; 

    if([string rangeOfCharacterFromSet:allowedCharacters.invertedSet].location == NSNotFound){ 
     return YES; 
    } 

    return NO; 
} 
+0

Я не хочу проверять каждый отдельный символ, я хочу проверить всю строку после ее завершения. – Tiddly

+0

В чем разница? Безопасно проверять отдельные символы при вставке, а затем проверять, когда закончен режим редактирования, обычно это делается так. – entropid

+0

Он изменяет поток, чтобы проверить char на char. Я согласен, что было бы лучше, но это не мой звонок. – Tiddly

0

regx должен быть

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz»

вы можете использовать

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

     if (textField == emailid) { 
      NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"] invertedSet]; 
      NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 
      ; 
      return [string isEqualToString:filtered]; 
     } 
    } 
+0

Как я уже говорил выше, я не хочу проверять каждый отдельный символ, я хочу проверить всю строку после ее завершения. – Tiddly

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

  • Нет связанных вопросов^_^