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

How to create regex for optional float value in UITextField?

我正在尝试从 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)
    }

它总是 returns 错误。

123456.123456 应该是假的

12.12 应该是正确的

你可以使用这个:^\d{1,2}(?:[.,]\d{1,2})?$

Demo

说明

^ 从行首开始,

\d{1,2} 匹配 1 上 2 次之间的任意数量的数字

(?:[.,]\d{1,2})? 可选 1 位或 2 位小数(?: 是非捕获组)

$ 直到行尾

试试这个

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

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

.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+) 是数字语言解析的核心标准(无装饰)。