浮点、范围和零的正则表达式

Regex for floating points, range and zero

我需要匹配实时输入中的零、整数和浮点数的正则表达式,但也需要小数点分隔符后的长度。 所以当用户点击

时应该没问题
  1. 0, 0,2, 1,1234
  2. 如果输入 0 然后 0,然后 0,1 等也应该有效...
  3. 如果用户点击“。”并且 decimalSeparator 是 "," 验证应该失败。 问题是我的正则表达式不匹配零:
let decimalSeparator = NumberFormatter().decimalSeparator ?? ","
let range = 4
var pattern: String {
 return "^(?![0.]+$)[0-9]{0,10}(?:\\(decimalSeparator)[0-9]{0,\(range)})?$" 
}
let exp = try NSRegularExpression(pattern: pattern,  options: .caseInsensitive).firstMatch(in: string,
                                                                                   options: [],
                                                                                   range: NSRange(location: 0,
                                                                                                  length: string.count))```

(?![0.]+$) 否定先行匹配一个位置,该位置未立即跟一个或多个 . 或零直到字符串结尾。

因此,要允许匹配零,您需要摆脱前瞻:

let decimalSeparator = NumberFormatter().decimalSeparator ?? ","
let range = 4
var pattern: String {
 return "^[0-9]{0,10}(?:\\(decimalSeparator)[0-9]{0,\(range)})?$" 
}
let exp = try NSRegularExpression(pattern: pattern,  options: .caseInsensitive).firstMatch(in: string,
                                                                                   options: [],
                                                                                   range: NSRange(location: 0,
                                                                                                  length: string.utf16.count))