iOS開發之正則表示式
阿新 • • 發佈:2020-08-11
正則表示式就是用“字串”來描述一種規則特徵,然後去驗證另一個字串是否符合這個特徵。比如:驗證手機號碼是否符合規則,驗證身份證號碼是否符合規則,驗證郵箱是否符合規則等。
元字元
正則表示式語言有兩種基本字元型別組成:原義文字符
和元字元
。元字元
就是正則表示式中那些具有特殊意義的專用字元,使正則表示式具有處理能力,可以用來規定其前導字串在目標物件中的模式。
常用的元字元如下:
元字元 | 描述 |
---|---|
^ | 正在表示式的開始位置 |
$ | 正在表示式的結束位置 |
. | 除換行符之外的任意字元 |
\ | |
, | 分割 |
() | 分組 |
[] | 包含,預設一個長度 |
[0-9] | 匹配 1 個 0~9 的數字 |
[a-z] | 匹配 1 個小寫 a~z 的字元 |
[A-Z] | 匹配 1 個大寫 A~Z 的字元 |
[a-zA-Z] | 匹配 1 個英文字母 |
[a-zA-Z0-9] | 匹配 1 個英文字母或數字 |
{n} | 重複 n 次 |
{n, m} | n =< 重複次數 <= m |
* | 不限制重複次數,重複次數 >=0 |
+ | 重複次數 >= 1次 |
? | 重複次數 0 次或者 1 次,比如數字中小數點 |
\ | 轉義符,可以將一些特殊意義的字元轉換 |
\d | 匹配數字 |
\w | 匹配數字,字母,下劃線 |
\s | 匹配空白字元 |
\D | 匹配非數字字元, 與 \d 相反 |
\W | 匹配非數字,非字母,非下劃線,與 \w 相反 |
\S | 匹配非空白字元, |
注:\d
和 [0-9]
的區別:
- [0-9] 匹配的是純數字
- \d 匹配的是 Unicode 編碼後的數字,包含了012345789٠١٣٤٥٦٧٨۰۱۲۳۴۶۷等各種語言的0-9
正則表示式使用方法
在 iOS 開發中,正則表示式常用來進行判定和篩選操作。使用方法如下
- 判定是否符合規則
let string = "1" let regular = "[0-9]" /// 判定是否符合規則 let predicate = NSPredicate(format: "SELF MATCHES %@", regular) let isSuccess = predicate.evaluate(with: string) print("是否符合規則:", isSuccess ? "符合規則" : "不符合規則") ///輸出結果為: 是否符合規則: 符合規則
- 進行篩選,比如可以進行篩選字串中的某些數字位置等。
let string = "abcdeft12345"
let pattern = "[0-9]*"
/// 判定進行篩選操作
let regular = try! NSRegularExpression(pattern: pattern, options: [])
let results = regular.matches(in: string, options: [], range: NSRange(location: 0, length: string.count))
for result in results {
let str = (string as NSString).substring(with: result.range)
print("篩選結果:", str)
}
注:其實正則表示式使用就是講上述的元字元
進行組合使用,比如:
[0-9]
:表示 0~9 中的一個數字。[0-9]*
:表示 0~9 中的任意長度陣列。[0-9]{10}
:表示 0~9 組成的長度為 10 的數字。
其他正則表示式的使用也就是使用 元字元
進行各種組合拼接而成的。
常用的正則表示式
- 英文字母開頭:
^[A-Za-z]+$
- 郵箱驗證:
[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}
- 身份證號碼:
^(\\d{14}|\\d{17})(\\d|[xX])$
- 手機號碼:
^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$
- 網址連結:
http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- .\\/?%&=]*)?
- 銀行卡卡號:
^(\\d{15,30})
- 銀行卡後四位:
^(\\d{4})
- 全英文:
^[A-Za-z]+$
- 全英文大寫:
^[A-Z]+$
- 全英文小寫:
^[a-z]+$
- 全英文字母數字:
^[A-Za-z0-9]+$
- 汽車車牌號:
^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$
- 護照驗證:
^1[45][0-9]{7}|([P|p|S|s]\\d{7})|([S|s|G|g]\\d{8})|([Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\\d{8})|([H|h|M|m]\\d{8,10})$