如何为 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})?$
说明
^
从行首开始,
\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+)
是数字语言解析的核心标准(无装饰)。
我正在尝试从 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})?$
说明
^
从行首开始,
\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+)
是数字语言解析的核心标准(无装饰)。