Проверка текстового поля iOS

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

Мне нужен способ убедиться, что телефонные номера содержат 10 цифр без каких-либо других символов, т.Е. (), и убедитесь, что адреса электронной почты являются действительными электронными письмами (отформатированы правильно).

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

Ответ №1:

Это проверит UITextField на наличие правильного адреса электронной почты и номера телефона из 10 цифр или меньше.
Добавьте этот метод в делегат текстовых полей, затем проверьте, следует ли добавлять символы, которые он собирается изменить, или нет.
Возвращает YES или NO в зависимости от текстового поля, количества символов в нем в данный момент и того, какие символы он хочет добавить:

 #define ALPHA                   @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define NUMERIC                 @"1234567890"
#define ALPHA_NUMERIC           ALPHA NUMERIC

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *unacceptedInput = nil;
    switch (textField.tag) {
        // Assuming EMAIL_TextField.tag == 1001
        case 1001:
            if ([[textField.text componentsSeparatedByString:@"@"] count] > 1)
                unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet];
            else
                unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%amp;'* -/=?^_`{|}~@"]] invertedSet];
            break;
        // Assuming PHONE_textField.tag == 1002
        case 1002:
            if (textField.text.length   string.length > 10) {
                return NO;
            }
            unacceptedInput = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
            break;
        default:
            unacceptedInput = [[NSCharacterSet illegalCharacterSet] invertedSet];
            break;
    }
    return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1);
}  
  

Кроме того, ознакомьтесь с этими 2 статьями:
PhoneNumberFormatter
Автоматически форматирует UITextField телефонного номера на iPhone.

Комментарии:

1. Выглядит хорошо, я раньше не заглядывал в делегат текстового поля.

2. chown, это отлично работает, но, похоже, не обрабатывает события delete key. Возвращает NO, если значение phone> = 10, поэтому не изменяется при удалении

3. О, вы правы. Заменить if (textField.text.length >= 10) на if (textField.text.length string.length > 10)

4. Использование тегов (магических чисел) для различения ваших представлений — не очень умный код. Почему бы просто не сравнить «TextField == self.emailInput», предполагая, что у вас есть два свойства self.emailInput и self.phoneInput? Код будет легче читать и менее подвержен ошибкам. Кроме того, в целом регулярные выражения дадут вам лучшие результаты: «[0-9] {10}» для телефонных номеров и что-то вроде «[a-zA-Z] [a-zA-Z.0-9]{2,30}@([ а-за-З][а-zA-Z0-9]{1,30}[.]) [ a-zA-Z]{2,3} для электронных писем. Обратите внимание, что я не проверял регулярное выражение электронной почты, это просто то, что может сработать, и я не помню, как именно это должно выглядеть.

Ответ №2:

Вот простой способ обеспечить длину номера телефона в UIViewController, который имеет текстовое поле в его представлении.

 - (void)valueChanged:(id)sender
{
    if ([[[self phoneNumberField] text] length] > 10) {
        [[self phoneNumberField] setText:[[[self phoneNumberField] text] 
          substringToIndex:10]]; 
    } 
}

- (void) viewWillAppear:(BOOL)animated
{
    [[self phoneNumberField] addTarget:self 
                            action:@selector(valueChanged:) 
                            forControlEvents:UIControlEventEditingChanged];
}
  

Для электронных писем, я полагаю, вы хотите проверить регулярное выражение, когда оно теряет фокус.

Ответ №3:

Вот простой пример проверки UITextField при вводе с клавиатуры, другие символы не отображаются

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//UITextField *tf_phonenumber,*tf_userid;
if (textField.text<=10) {
char c=*[string UTF8String];
if (tf_phonenumber==textField)      //PhoneNumber /Mobile Number
{
    if ((c>='0' amp;amp; c<='9')||(c==nil)) {
        return YES;
    }
    else
        return NO;
}
if (tf_userid==textField)           //UserID validation
{
    if ((c>='a' amp;amp; c<='z')||(c>='A' amp;amp; c<='Z')||(c==' ')||(c==nil)) {
        return YES;
    }
    else
        return NO;
}
    return YES;
}
else{
    return NO;
}
}