1. 程式人生 > 實用技巧 >iOS開發之正則表示式

iOS開發之正則表示式

正則表示式就是用“字串”來描述一種規則特徵,然後去驗證另一個字串是否符合這個特徵。比如:驗證手機號碼是否符合規則,驗證身份證號碼是否符合規則,驗證郵箱是否符合規則等。

元字元

正則表示式語言有兩種基本字元型別組成:原義文字符元字元元字元就是正則表示式中那些具有特殊意義的專用字元,使正則表示式具有處理能力,可以用來規定其前導字串在目標物件中的模式。

常用的元字元如下:

元字元 描述
^ 正在表示式的開始位置
$ 正在表示式的結束位置
. 除換行符之外的任意字元
\
, 分割
() 分組
[] 包含,預設一個長度
[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 的數字。

其他正則表示式的使用也就是使用 元字元進行各種組合拼接而成的。

常用的正則表示式

  1. 英文字母開頭:^[A-Za-z]+$
  2. 郵箱驗證:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}
  3. 身份證號碼:^(\\d{14}|\\d{17})(\\d|[xX])$
  4. 手機號碼:^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$
  5. 網址連結:http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- .\\/?%&=]*)?
  6. 銀行卡卡號:^(\\d{15,30})
  7. 銀行卡後四位:^(\\d{4})
  8. 全英文:^[A-Za-z]+$
  9. 全英文大寫:^[A-Z]+$
  10. 全英文小寫:^[a-z]+$
  11. 全英文字母數字:^[A-Za-z0-9]+$
  12. 汽車車牌號:^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$
  13. 護照驗證:^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})$