IOS开发入门之Swift里正则表达式的正确用法(限制TextField的文本输入,登录时判断正确的手机号)
凌雪 2018-11-12 来源 :网络 阅读 1781 评论 0

摘要:本文将带你了解IOS开发入门iOS开发:Swift里正则表达式的正确用法(限制TextField的文本输入,登录时判断正确的手机号),希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门iOS开发:Swift里正则表达式的正确用法(限制TextField的文本输入,登录时判断正确的手机号),希望本文对大家学IOS有所帮助。



   

<code>iOS开发:Swift里正则表达式的正确用法(限制TextField的文本输入,登录时判断正确的手机号)。

</code>

   

首先从最基本的用法开始说起:


   

<code>          let string = "ab123cdefg456hijk"

 

        let expression = "\\d"//创建表达式,\d是专门匹配数字的,等效于[0-9],注意:我们用的时候记得再前面多加个"\"。

 

        let regex = try! NSRegularExpression(pattern: expression, options:   .allowCommentsAndWhitespace)//生成NSRegularExpression实例

 

        let numberOfMatches =   regex.numberOfMatches(in: string, options:.reportProgress, range:   NSMakeRange(0,   (string as NSString).length))//匹配到数字的个数

 

        print(numberOfMatches)// 6</code>

   

接下来结合实际需求来介绍,有时候我们需要限制输入框只能输入特定的字符串,比如只能输入小数点后两位,这里我们需要调用   UITextField 协议里的一个方法: func textField(_ textField: UITextField,   shouldChangeCharactersIn range: NSRange, replacementString string: String)   -> Bool ,这个方法会在我们输入文字的时候调用,如果返回 false   则输入框不会显示任何文字,我们就可以在这个方法里对我们输入的文字做正则匹配,如果不满足就返回   false,代码:


   

<code>    func   textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,   replacementString string: String) -> Bool   {

 

        let str = (textField.text! as   NSString).replacingCharacters(in: range, with: string)//获取输入框接收到的文字

 

        let expression = "^\\d*\\.?\\d{0,2}$"//创建表达式,"*"表示重复0次或更多次,"."表示匹配除换行符以外的任意字符,如果我们想直接匹配"."本身,就得在前边加转义符\\,"?"表示重复0或1次,{0,2}表示重复0或2次,"^","$"分别匹配字符串的开始和末尾,所以整个意思就是,匹配可重复出现的数字+一个"."+两个数字

 

        let regex = try! NSRegularExpression(pattern: expression, options:   .allowCommentsAndWhitespace)//生成NSRegularExpression实例

 

        let numberOfMatches =   regex.numberOfMatches(in: str, options:.reportProgress, range: NSMakeRange(0, (str as NSString).length))//获取匹配的个数

 

        return numberOfMatches != 0//如果匹配数量为0则表示不符合输入要求

    }</code>

   

再比如我们在写手机登录的时候,我们需要用户输入正确的手机号按钮才能生效,具体实现方法:




   

<code>class ViewController: UIViewController{

    var loginBtn:UIButton!

    var textField:UITextField!

 

    override func viewDidLoad()   {

        super.viewDidLoad()

 

        loginBtn = UIButton(frame: CGRect(x:   100, y:   150,   width: 60,   height: 40))

        loginBtn.setTitle("Login", for:   .normal)

        loginBtn.backgroundColor = UIColor.lightGray

        loginBtn.isEnabled = false

        loginBtn.addTarget(self, action:   #selector(login), for:   .touchUpInside)

        view.addSubview(loginBtn)

 

        textField = UITextField(frame: CGRect(x:   100, y: 100,   width: 200,   height: 20))

        textField.borderStyle =   .roundedRect

        textField.keyboardType =   .numberPad//设置键盘类型为数字键盘

        view.addSubview(textField)

 

        NotificationCenter.default.addObserver(self, selector:   #selector(textDidChange), name: .UITextFieldTextDidChange, object:   nil)//观察是否有文字输入

    }

 

    func   textDidChange(){

        if let str = textField.text{

            let expression = "^((13\\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[^14]))\\d{8}$"//"|"表示什么就不用说了吧,[5|7]表示满足其中任意一个即匹配,数量唯一,"[0-3]"则表示满足0到之间的数字即匹配,数量唯一,[^14]表示匹配除1和4以外的任意字符,这里包括了字母,所以建议弹出键盘类型为数字键盘

 

            let regex = try! NSRegularExpression(pattern: expression, options:   .allowCommentsAndWhitespace)//生成NSRegularExpression实例

 

            let numberOfMatches =   regex.numberOfMatches(in: str, options:.reportProgress, range:   NSMakeRange(0, (str   as NSString).length))//获取匹配的个数

 

            if numberOfMatches != 0{//如果匹配,则登录按钮生效,否则反之

                loginBtn.backgroundColor = UIColor.brown

                loginBtn.isEnabled = true

            }else{

                loginBtn.backgroundColor =   UIColor.lightGray

                loginBtn.isEnabled = false

            }

        }

    }

 

    func login(){

        let alert = UIAlertController(title: nil,   message: "login", preferredStyle: .alert)

        let confirm = UIAlertAction(title:   "确认", style: .default, handler: nil)

        alert.addAction(confirm)

        present(alert, animated: true, completion: nil)

    }

 

    override func didReceiveMemoryWarning()   {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be   recreated.

    }

}</code>

   


    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程