如何在UITextField中为可选的浮点值创建正则表达式?

时间:2017-05-15 13:59:03

标签: ios regex swift3 uitextfield nsregularexpression

我试图在UITextField中获得用户的体重。价值可以是这样的东西

9

9.56

50

50.75

目前我已经尝试了这个并且没有工作。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let Regex = "([0-9]){0,2}\\.([0-9]){0,2}"
        let TestResult = NSPredicate.init(format:"SELF MATCHES %@",Regex)
        return TestResult.evaluate(with: textField.text! + string)
    }

它总是返回false。

123456.123456应该是假的

<12> 12.12应该是真的

3 个答案:

答案 0 :(得分:1)

如果您只想匹配以下格式,请使用此选项:

.1  
.12  
1  
1.  
1.1  
1.12  
12  
12.  
12.1  
12.12  

^(?:\d{1,2}(?:\.\d{0,2})?|\.\d{1,2})$

不匹配空字符串。

解释

 ^                             # BOS
 (?:                           # --------------
      \d{1,2}                       # one or two digits
      (?: \. \d{0,2} )?             # optional '.' and 0 to 2 digits
   |                              # or,
      \. \d{1,2}                    # '.' and 1 or 2 digits
 )                             # --------------
 $                             # EOS

注意 - 始终使用锚点,因为它使它成为一个独立的便携式解决方案!!
另外,作为参考,(?:\d+(?:\.\d*)?|\.\d+)是语言解析数字(无装饰)的核心标准。

答案 1 :(得分:0)

你可以使用这个:_

Demo

<强>解释

^\d{1,2}(?:[.,]\d{1,2})?$从行首开始,

^匹配1对2次之间的任意位数

带有可选1或2位小数的

\d{1,2}(?:[.,]\d{1,2})?是非捕获组)

?:直到行尾

答案 2 :(得分:0)

试试这个

[0-9] {2,2}?([。] [0-9] {2,2}?)?