swift——簡單的正則表達式

最近項目裏的有一些輸入文字須要判斷,需求又弄得人比較煩,因此決定用正則寫,關於swift正則的文章不多,因此就貼出我最近用到的。java

代碼以下

// MARK: - String類型的拓展
extension String{
    
    
    /// 身份證正則
    ///
    /// - Returns: true or false
    /// 身份證號的需求給出的是最後一位能夠爲大寫的X英文字母,可是我發現即便改變options:的值,也沒有區分,因此作了一個小寫x返回false的判斷。若是有人知道這個怎麼處理,但願能留言給我,謝謝。
    func IsLegalForIDCardNumber()->Bool{
        
        if self.characters.last == "x"{
         
            return false
            
        }
        
        var result = ""
        // - 一、建立規則
        let pattern1 = "(^[0-9]{15}$)|([0-9]{17}([0-9]|[X])$)"
        //        let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$"
        // - 二、建立正則表達式對象
        let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive)
        // - 三、開始匹配A
        let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSMakeRange(0, self.characters.count))
        // 輸出結果
        for checkingRes in res {
            result = result + (self as NSString).substring(with: checkingRes.range)
        }
        if result == self{
            return true
        }else{
            return false
        }
        
    }
    
    /// 銀行卡號正則
    ///
    /// - Returns: true or false
    func IsLegalForBankCardNumber()->Bool{
        
        for char in self.characters{
            if char == "_"{
                return false
            }
        }
        
        var result = ""
        // - 一、建立規則
        let pattern1 = "[0-9]{15,18}"
        //        let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$"
        // - 二、建立正則表達式對象
        let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive)
        // - 三、開始匹配
        let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count))
        // 輸出結果
        for checkingRes in res {
            result = result + (self as NSString).substring(with: checkingRes.range)
        }
        if result == self{
            return true
        }else{
            return false
        }
        
    }
    
    /// 手機號正則
    ///
    /// - Returns: true or false
    func IsLegalForPhoneNumber()->Bool{
        
        for char in self.characters{
            if char == "_"{
                return false
            }
        }
        
        var result = ""
        // - 一、建立規則
        let pattern1 = "1[0-9]{10}"
        //        let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$"
        // - 二、建立正則表達式對象
        let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive)
        // - 三、開始匹配
        let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count))
        // 輸出結果
        for checkingRes in res {
            result = result + (self as NSString).substring(with: checkingRes.range)
        }
        if result == self{
            return true
        }else{
            return false
        }
        
    }
}
複製代碼

說一下手機號的正則格式 let pattern1 = "1[0-9]{10}" 雙引號裏的1就是第一位必須是1,後續的[0-9]就是純數字的意思,{10}就是重複10次。10次加上第一位必須爲1就是11位手機號的判斷。python

貼上網上找到的比較好的正則講解

- 幾乎全部的程序設計語言都支持正則表達式,例如:OC,java,c#,python,js等
- 在不少文本編輯器裏,可使用正則表達式進行檢索,Xcode一樣支持正則表達式!
正則表達式的用處:
1. 判斷給定的字符串是否符合某一種規則(專門用於操做字符串)
    > 電話號碼,電子郵箱,URL...
    能夠直接百度別人寫好的正則
    1>     別人真的寫好了,並且測試過了,咱們能夠直接用
    2>    要寫出沒有漏洞正則判斷,須要大量的測試,一般最終結果很是負責

2. 過濾篩選字符串,網絡爬蟲
3. 替換文字,QQ聊天,圖文混排

0>    匹配
--------------------------------------------------------------------------------
(pattern)        匹配pattern並獲取這一匹配,所獲取的匹配能夠從產生的Matches集合獲得

1>    集合
--------------------------------------------------------------------------------
[xyz]        字符集合(x/y或z)
[a-z]        字符範圍
[a-zA-Z]
[^xyz]        負值字符集合 (任何字符, 除了xyz)
[^a-z]        負值字符範圍
[a-d][m-p]  並集(a到d 或 m到p)

2>    經常使用元字符
--------------------------------------------------------------------------------
.            匹配除換行符之外的任意字符
\w            匹配字母或數字或下劃線或漢字 [a-zA-Z_0-9]
\s            匹配任意的空白符(空格、TAB\t、回車\r \n)
\d            匹配數字 [0-9]


^            匹配字符串的開始
$            匹配字符串的結束
\b            匹配單詞的開始或結束

2>    經常使用反義符
--------------------------------------------------------------------------------
\W          匹配任意不是字母,數字,下劃線,漢字的字符[^\w]
\S            匹配任意不是空白符的字符 [^\s]
\D            匹配任意非數字的字符[^0-9]


\B            匹配不是單詞開頭或結束的位置
[^x]        匹配除了x之外的任意字符
[^aeiou]    匹配除了aeiou這幾個字母之外的任意字符



4>    經常使用限定符
--------------------------------------------------------------------------------
*            重複零次或更屢次
+            重複一次或更屢次
?            重複零次或一次
{n}            重複n次
{n,}        重複n次或更屢次
{n,m}        重複n到m次,

5>    貪婪和懶惰
--------------------------------------------------------------------------------
*?            重複任意次,但儘量少重複
*+            重複1次或更屢次,但儘量少重複
??            重複0次或1次,但儘量少重複
{n,m}?      重複n到m次,但儘量少重複
{n,}?        重複n次以上,但儘量少重複
複製代碼

有關正則表達式,若有不對能夠留言交流,互勉。正則表達式

相關文章
相關標籤/搜索