You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式限制TextField仅含数字、单个逗号或句号?

解决TextField同时输入句号和逗号的问题

原代码的正则允许同时输入.和,,导致先输入.后还能输入,,不符合需求。我们需要修改正则,限制整个输入里只能出现.或者,中的一个,或者都不出现。

修改后的正则表达式

把原正则 ^[\\d]*(?:\\.?\\,?[\\d]*)?$ 替换为:

^\\d*(?:[.,]\\d*)?$

这个正则的含义:

  • ^ 和 $ 确保匹配整个输入字符串
  • \\d* 允许开头有任意数量的数字(包括0个)
  • (?:[.,]\\d*)? 是一个可选的非捕获组:
    • [.,] 匹配要么是.,要么是,,二选一
    • \\d* 允许符号后面跟任意数量的数字(包括0个)
    • 整个组加了?,所以允许输入纯数字(没有符号)

修改后的完整代码

struct TextFieldNumbersOnly: View {
    @State private var inputValue = ""

    var body: some View {
        TextField("enter numbers", text: self.$inputValue)
            //.keyboardType(.decimalPad) //commented out for testing purposes only
            .onReceive(Just(self.inputValue), perform: self.textInputValidator)
    }
    
    func textInputValidator(newValue: String) {
        // 修改这里的正则表达式
        if newValue.range(of: "^\\d*(?:[.,]\\d*)?$", options: .regularExpression) != nil {
            self.inputValue = newValue
        } else if !self.inputValue.isEmpty {
            self.inputValue = String(newValue.prefix(self.inputValue.count - 1))
        }
    }
}

验证效果

  • 纯数字:12345 → 允许
  • 带句号:123.45、.45、123. → 允许
  • 带逗号:123,45、,45、123, → 允许
  • 同时带句号和逗号:123.,45、. , → 不允许,输入后会被自动回退到上一个合法状态

内容的提问来源于stack exchange,提问作者fs_tigre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:45:24