色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS開發之正則表達式

大小:0.3 MB 人氣: 2017-09-26 需要積分:1

  正則表達式是一種用來進行文本匹配的工具,其語法優美簡潔。在開發中,查找、對比以及匹配字符串是家常便飯的業務,通過正則表達式我們將這些業務描述成某些需求規則,來讓我們的代碼更美觀、實用。例如我們要驗證用戶輸入的密碼長度是否滿足6~18位的長度,新手最常見的驗證方式是判斷輸入的密碼長度。

  return (textField.text.length 》= 6 && textField.text.leng 《= 18);

  盡管這種判斷方式沒有任何問題,而上面的驗證換做正則表達式的匹配字符就顯得短小精悍

  ^.{6,18}$

  還有,大部分的固定電話都是0區號-八位數字的格式,那么正則表達式的匹配如下

  ^0\\d{2}\-?\\d{8}$

  再比如,對于密碼強度的認證。如今的密碼應該包括一個或以上的大寫字母以及小寫字母,對此正則表達式的匹配是

  (^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$)

  表達式字符解析

  如果是新手開發者,那么很有可能不理解上面的正則表達式。那么我們先看第一個匹配條件,匹配6-18位的密碼長度。根據題目的要求,就能夠輕易的判斷出{6,18}表示6-18位。其中,{n}匹配字符重復n次;{n,}匹配重復n次或更多次;{n,m}匹配重復n到m之間次數。

  那么讀者對^、。和$三個符號可能不明所以。^和$屬于特殊符號,前者表示匹配字符串的開頭,后者表示匹配字符串的結尾。由于我們有時需要在一段很長的字符串中匹配某些小片段字符串時(比如在圖文混編中匹配長字符串中留空的表情符號),適當使用這兩個符號可以減少匹配次數,提高執行效率。

  那么結合這幾個字符代表含義,可以得出。符號表示任一字符(除換行符之外)。那么還可以得出{6,18}這個特殊符號表示的是前一個符號代表的位數。結合起來說^.{6,18}$匹配一段6至18位長度的字符串,所以可以用來驗證密碼長度。

  當然了,。字符的匹配率太高,更多時候我們需要匹配的是具體到數字或者字母,甚至準確的數字和字母。那么除了。字符以外,還有\d用來表示任意的單個數字,\w表示任意一個字母或數字或者直接使用0-9的任意數字表示具體數字。而特殊符號?表示前一個字符為0或者1個。

  所以上面的^0\\d{2}\-?\\d{8}$匹配了以數字0開頭,接著兩個數字,后面跟著-號跟八個數字,然后結尾的字符串,不管是010-88888888,還是02098989898都能進行正確匹配。

  最后的一個表達式可能是最復雜的表達式,根據上面對部分符號的解析。我們可以把

  ^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$

  拆分成

  ^.*[A-Z]+.*[a-z]+.*$ 跟 ^.*[a-z]+.*[A-Z]+.*$

  這兩個單獨的表達式,而中間的|不難猜到就是邏輯的或。我們將對前一個進行拆分,來一步步識別這個表達式的匹配規則。這里教大家我拆分表達式的方法:我把表達式的字符分為兩類:值表達和修飾表達。所謂值表達就是說這個符號表示了某個值,就像\d表示數字,。表示任意非換行符字符。修飾表達用來修飾值達成某種條件,比如{2}表示前面一個值重復兩次,*表示前一個值重復0次或者更多次。根據這種方法,那么^.*[A-Z]+.*[a-z]+.*$可以拆分成部分:^$、 .* 、 [A-Z]+ 、 [a-z]+。

  ^$就不再多說。

  .*這里要介紹的就是*表示前一個值符號重復任意次數。

  [A-Z]+中-表示從左邊的值到右邊的值之間所有值形成的閉集合;[]方括號表示的值必須是括號中間集合的子集,要注意的是括號里面可以有多個集合,比如[A-Z0-9a-z]表示匹配任意一個大小寫字母或數字;+同*有點像,但是+表示的是至少一個的重復值。

  結合上面的解析,那么^.*[A-Z]+.*[a-z]+.*$表示以任意數量的字符開頭,然后跟著一個大寫字母,大寫字母后面有任意數量的字符以及一個小寫字母,然后又是任意數量的數字、字母或者字符。而^.*[a-z]+.*[A-Z]+.*$表示小寫字母在大寫字母前面任意數量的字符的位置,兩個結合匹配可以確保字符串中包括至少一個小寫字母和一個大寫字母。

  ps:有一點要注意,上面展示的表達式解析時\d這些特殊符號在我們的代碼中多了一個\,這是因為\本身是轉義符號,為了保證表達式能正常匹配,我們要給\進行一次轉義,所以就變成了\\。基本上所有的符號字符都需要轉義。

  語法/字符說明表

  值表達

  。 匹配除換行符外的任意字符

  \w 匹配字母或者數字的字符

  \W 匹配任意不是字母或數字的字符

  \s 匹配任意的空白符(空格、制表符、換行符)

  \S 匹配任意不是空白符的字符

  \d 匹配任意數字

  \D 匹配任意非數字的字符

  \b 匹配單詞的結尾或者開頭的字符

  \B 匹配任意不是單詞結尾或開頭的字符

  [^x] 匹配任意非x的字符。如[^[a-z]]匹配非小寫字母的任意字符

  ^ 匹配字符串的開頭

  $ 匹配字符串的結尾

  修飾表達

  * 匹配重復任意次數

  + 匹配重復一次以上的次數

  ? 匹配一次或零次

  {n} 匹配重復n次

  {n,} 匹配重復n次或n次以上

  {n,m} 匹配重復最少n次最多m次

  除了上面列出的字符外,還有包括表示位置指定等較難運用的其他正則表達式,但上面的字符已經足夠我們正常使用了。想了解更多知識可以度娘Google。

  代碼實操

  上面我們只是簡單的講解了正則表達式中各個字符代表的意義,那么在iOS開發中應該怎么使用。對于有意使用正則規則來匹配的開發者,我的建議是封裝成為類別方法,一次封裝,多次調用。下面用我自己封裝的代碼進行說明。這些方法通過擴展UITextField方法來實現:

  @interface UITextField (LXDValidate)

  /*! 判斷文本框是否為空(非正則表達式)*/

  - (BOOL)isEmpty;

  /*! 判斷郵箱是否正確*/

  - (BOOL)validateEmail;

  /*! 判斷驗證碼是否正確*/

  - (BOOL)validateAuthen;

  /*! 判斷密碼格式是否正確*/

  - (BOOL)validatePassword;

  /*! 判斷手機號碼是否正確*/

  - (BOOL)validatePhoneNumber;

  /*! 自己寫正則傳入進行判斷*/

  - (BOOL)validateWithRegExp: (NSString *)regExp;

  @end

  方法實現文件:

  #import “UITextField+LXDValidate.h”

  @implementation UITextField (LXDValidate)

  - (BOOL)isEmpty

  {

  return self.text.length == 0;

  }

  - (BOOL)validateEmail

  {

  return [self validateWithRegExp: @“^[a-zA-Z0-9]{4,}@[a-z0-9A-Z]{2,}\\。[a-zA-Z]{2,}$”];

  }

  - (BOOL)validateAuthen

  {

  return [self validateWithRegExp: @“^\\d{5,6}$”];

  }

  - (BOOL)validatePassword

  {

  NSString * length = @“^\\w{6,18}$”; //長度

  NSString * number = @“^\\w*\\d+\\w*$”; //數字

  NSString * lower = @“^\\w*[a-z]+\\w*$”; //小寫字母

  NSString * upper = @“^\\w*[A-Z]+\\w*$”; //大寫字母

  return [self validateWithRegExp: length] && [self validateWithRegExp: number] && [self validateWithRegExp: lower] && [self validateWithRegExp: upper];

  }

  - (BOOL)validatePhoneNumber

  {

  NSString * reg = @“^1\\d{10}$”;

  return [self validateWithRegExp: reg];

  }

  - (BOOL)validateWithRegExp: (NSString *)regExp

  {

  NSPredicate * predicate = [NSPredicate predicateWithFormat: @“SELF MATCHES %@”, regExp];

  return [predicate evaluateWithObject: self.text];

  }

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: bl 纯肉 高Hbl被强文| 不分昼夜H1V3| 亚洲高清中文字幕| 亚洲国产日韩欧美在线a乱码| 亚洲AV美女成人网站P站| 亚洲免费在线观看| 在线观看永久免费网站| 999久久国产精品免费人妻| 糙汉顶弄抽插HHHH| 国产精品一区二区AV白丝在线| 国产在线亚洲v天堂a| 久久久久久天天夜夜天天| 男人J桶进男人屁股过程| 日本成熟bbxxxxxxxx| 日韩精品真人荷官无码| 亚洲 视频 在线 国产 精品| 伊人AV一区二区三区夜色撩人| 97se se| 成人国产在线观看| 国内高清在线观看视频| 两百磅美女| 少妇高潮久久久久7777| 亚洲色图在线观看视频| 99爱免费视频| 国产成人一区二区三区在线观看| 精品国产影院| 欧美日韩亚洲一区视频二区| 无套内射纹身女视频| 在线免费视频a| 二次元美女扒开内裤喷水| 黑人娇小BBW| 欧美亚洲国内日韩自拍视频| 亚洲AV色香蕉一区二区三区| 99RE8国产这里只有精品| 国产精品99久久久久久AV下载| 久久精品WWW人人爽人人| 日韩伦理电影秋霞影院| 一个人免费完整在线观看影院| yellow免费影视大全| 极品美女穴| 日日做夜夜欢狠狠免费软件|