开发者社区> 文如秋雨> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Swift实用小册26: 正则表达式的使用

简介: 在本章中,你将学会常用的正则表达式的使用方法。
+关注继续查看

image.png

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

项目创建


我们新建一个PlayGround项目,命名为SwiftRegularExpression

image.png

正则表达式的定义


正则表达式,是记录文本规则的代码。

系统接收一串字符时,在业务上需要对这段字符代码进行规则判断,示例:电话号码是否合法。

用来对接收字符进行判断的规则,我们可以称之为正则表达式。

网址-正则表达式


我们使用NSPredicate关键字构建正则表达式,使用NSPredicate可以定义模糊查询条件,我们可以通过匹配的方式判断接收的参数是否符合我们设置的条件。示例:

import UIKit

var url = "https://juejin.cn/user/3897092103223517"

func errorURL(url: String) -> Bool {
    let currrentURL = "^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"
    let regextestURL = NSPredicate(format: "SELF MATCHES %@", currrentURL)
    if regextestURL.evaluate(with: url) == false {
        return false
    } else {
        return true
    }
}

if errorURL(url: url) {
    print("网址正确")
} else {
    print("网址不正确")
}

上述代码中,我们定义了一个变量url,赋值为我们掘金的账号地址。

然后定义了一个errorURL方法,接收String类型的url,返回一个Bool的结果。

在方法内,我们定义了一个网址地址的正则表达式currrentURL,然后我们通过NSPredicate关键字对接收到的urlcurrrentURL正则表达式做匹配,如果匹配成功,则返回true,如果不成功,则返回false

然后我们通过if-else的方法验证下结果。

image.png

手机号-正则表达式


正则表达式在我们实际开发过程中用的很多。

在登录注册页面,我们常常需要对手机号进行校验,除了之前的章节中提过的方法外,我们也可以使用正则表达式作为验证手机号正确与否的判断依据。示例:

var phoneNumber = “16666666666"

func validatedPhone(phoneStr: String) -> Bool {
    let phone = phoneStr.trimmingCharacters(in: CharacterSet.whitespaces)
    let regex = "^((13[0-9])|(14[5,7])|(15[^4,\\D]) |(17[0,0-9])|(18[0,0-9]))\\d{8}$"
    let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
    let result = predicate.evaluate(with: phone)
    return result
}

if validatedPhone(phoneStr: phoneNumber) {
    print("手机号正确")
}   else {
    print("手机号不正确")
}

上述代码中,我们声明了一个变量phoneNumber,并赋值手机号的字符串。

然后定义了一个validatedPhone方法,接收手机号,然后返回结果。

这里我们使用的正则表达式regex的规则为使用“”分开,我们判断常用的三大运营商的手机号规则,然后我们通过NSPredicate关键字对接收到的phoneStrregex正则表达式做匹配,如果匹配成功,则返回true,如果不成功,则返回false

然后我们通过if-else的方法验证下结果。

image.png

密码-正则表达式


上面我们写完了手机号的校验,下面我们再看看密码的正则表达式的方法。

密码的强度,我们要求是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。示例:

var password = “"

func validatedPassword(passwordStr: String) -> Bool {
    let password = passwordStr.trimmingCharacters(in: CharacterSet.whitespaces)
    let regex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"
    let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
    let result = predicate.evaluate(with: password)
    return result
}

if validatedPassword(passwordStr: password) {
    print("密码正确")
} else {
    print("密码不正确")
}

上述代码中,我们声明了一个变量password,并赋值空字符串

然后定义了一个validatedPassword方法,接收密码,然后返回结果。

在方法内,我们定义了一个密码规则的正则表达式regex,然后我们通过NSPredicate关键字对接收到的passwordStrregex正则表达式做匹配,如果匹配成功,则返回true,如果不成功,则返回false

然后我们通过if-else的方法验证下结果。

image.png

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Swift实用小册10:实例方法和类型方法的使用
Swift实用小册10:实例方法和类型方法的使用
34 0
Swift实用小册13:Initializer构造函数的使用
构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量设置初始值。 在之前的章节中,我们在类、结构体中可以声明常量和变量,并给变量/常量赋予了初始值,但如果不同业务当中存在初始值不同的情况,按照之前的方式,我们需要在具体业务中重新赋值。
25 0
Swift实用小册15:OptionalChaining可选链的使用
可选链,是一种以安全的方式访问类的对象属性的方式。 可选链的作用,其实是为了在我们访问某个对象属性时,防止由于返回结果为nil,即属性不存在而引发的系统报错或者闪退,因为Swift不能空调用。
30 0
Swift实用小册17:类型检查和类型转换
在本章中,你将学会类型检查和类型转换的使用方法。
18 0
Swift实用小册06:函数的定义、参数、返回、调用
Swift实用小册06:函数的定义、参数、返回、调用
51 0
Swift 4.0 正则的使用(上)
Swift 4.0 正则的使用
32 0
抢先看 Swift 3.0
本文讲的是抢先看 Swift 3.0,Swift 3.0 是一个不兼容 Swift 2.2 语法的大版本更新。它对语法和基本库有着根本性的改变。Swift 3.0 实现的完整修改列表可以在 Swift evolution site 中查看。
898 0
Swift中正则使用正则的几种方式
之前记录了用正则验证邮箱地址   下面我也记录一下用其它方法使用正则 如下,查询字符串内是否有大写字母,注意rangeOfString方法的第二个参数是.RegularExpressionSearch 正则查找。
774 0
Swift静态方法
<span style="font-size:14px;">与静态属性类似,Swift中还定义了静态方法,也称为类型方法,所谓“类型”是指枚举、结构体和类。静态方法定义的方法也是与静态属性类似的,枚举和结构体的静态方法使用的关键字是static,类的静态方法使用的关键字是class。<br>一、结构体中静态方法<br>下面我们先看一个结构体静态方法的示例,代码如下:<br></span><pr
1368 0
Swift下标
<p><span style="font-size:14px;">还记得字典吗?</span></p> <p><br></p> <p><span style="font-size:14px;"></span></p> <pre code_snippet_id="411200" snippet_file_name="blog_20140630_1_9690323" name="code" cla
811 0
+关注
文如秋雨
一只默默努力变优秀的产品汪......
102
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载