IOS中国际电话无模式

Posted

技术标签:

【中文标题】IOS中国际电话无模式【英文标题】:International phone no pattern in IOS 【发布时间】:2017-10-26 02:28:22 【问题描述】:

我必须在文本字段 92 123 0123456789 中使用此模式。创建一个文本字段以在其中获取电话号码。在属性检查器中,我已经对数字键盘进行了键盘输入,在文本中我给出了从 0123456789 获取数字的模式。当我运行一个应用程序并首先输入任何值时,它也需要字母并且我的模式也不起作用。我们如何做到这一点,它只采用数字值,而值模式应该只使用这种模式 923330123456789 ,因为它不应该在 92 之前采用 + 或 00 。

【问题讨论】:

【参考方案1】:

你需要实现textField delegate 之类的东西,

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


// allow back space
if (string.length == 0) 

    return YES;


NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];

if (([string rangeOfCharacterFromSet:set].location != NSNotFound) ) 

    return NO;



if (range.location == 0 && ![string  isEqual: @"9"]) 
    return NO;

if (range.location == 1 && ![string  isEqual: @"2"]) 
    return NO;




return YES;

别忘了设置

  yourTextField.delegate = self;

在你的viewDidload

更新:

您可以显示类似的警报,

  if (range.location == 0 && ![string  isEqual: @"9"]) 




    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"First character must be 9" message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show]; // It's for demo. `UIAlertView` is deprecated , you can use `UIAlertController` instead

    return NO;

【讨论】:

让我试试? @狮子 第一个字符为9,第二个为2!让我知道是否有其他要求! 这是完美的工作。如果用户尝试在您的代码中插入错误的模式,我们可以发出错误消息或敬酒吗? @狮子 是的!您可以在返回no 之前显示警报或敬酒! 在哪个下返回 no 。 @狮子【参考方案2】:

给你:

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


    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    newString = [newString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:string];

    BOOL stringIsValid = [numbersOnly isSupersetOfSet:characterSetFromTextField];
    if(!stringIsValid)
        return stringIsValid;

    int length = (int)newString.length;

    if(newString.length > 0 && newString.length < 3)
    
        // Need to check if first two character 9 or 92.
        NSString *firstTwoChar=[newString substringToIndex:length];

        if([firstTwoChar isEqualToString:@"9"] || [firstTwoChar isEqualToString:@"92"])
            return TRUE;
        else
            return FALSE;

        NSLog(@"%@",firstTwoChar);
    


    return YES;

【讨论】:

谢谢你的回答,但我是从另一个人那里得到的。 @Nirmalsinh 你能帮我解决我的另一个问题吗? @Nirmalsinh 是的,请告诉我 我通过在base64中编码来发送一些图像,但它们没有进入数据库。你知道我们如何将它发送到数据库。如果您给我您的电子邮件地址,我可以与您共享代码。 @Nirmalsinh 您可以使用AFNetworking将图片上传到服务器。 github.com/AFNetworking/AFNetworking

以上是关于IOS中国际电话无模式的主要内容,如果未能解决你的问题,请参考以下文章

电信“青年一派”电话卡沉默停机解决方法

电信“青年一派”电话卡沉默停机解决方法

在俄罗斯办的卡往中国打电话怎么打不出去

具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能

UWP在中国不允许打电话,如何防止在中国部署?

国外拨打国内电话