2016-08-11 183 views
0

這裏的正則表達式:爲什麼這個Swift RegEx匹配「e1234」?

let legalStr = "(?:[eE][\\+\\-]?[0-9]{1,3})?$" 

這裏的調用:

 if let match = sender.stringValue.rangeOfString(legalStr, options: .RegularExpressionSearch) { 
      print("\(sender.stringValue) is legal") 
     } 
     else { 
      print("\(sender.stringValue) is not legal") 
     } 

如果鍵入的垃圾,如 「ABCD」 是回報非法串。 如果我輸入類似「e123」的東西,它會返回合法的字符串。 (注意空字符串也是合法的。) 但是,如果我鍵入「e1234」,它仍然返回「合法」。我希望它返回「不合法」。我在這裏錯過了什麼嗎?順便說一句,請注意正則表達式末尾的「$」。三位數字應出現在字符串的末尾。

如果沒有立即清楚,字符串的來源是一個文本編輯框。

+0

請注意,刪除尾部「?」導致代碼按預期工作,儘管它不允許在那一點上出現空字符串。 – rawhide

回答

1

您的模式只錨定在最後,並匹配空字符串。所以任何字符串都會匹配成功,只需將您的模式匹配爲最後一個空字符串即可。

^添加到正面以將其固定在該面上。