Swift中如何判断字符串是否为带小数位的合法十进制数?
Swift精准验证带小数点的数字字符串问题
你的问题在于Decimal(string:)的解析逻辑过于宽松,它会将纯整数(如"56")、甚至部分不符合你要求的格式(如".")都解析为有效的Decimal实例,所以无法满足你“必须包含小数点且其后为整数”的验证需求。
要实现精准匹配,推荐使用正则表达式来严格校验字符串格式:
func isDecimal(str: String) -> Bool { // 正则规则:允许小数点前有0个或多个数字,小数点后至少有1个数字,无其他字符 let decimalPattern = #"^\d*\.\d+$"# return str.range(of: decimalPattern, options: .regularExpression) != nil }
测试验证
isDecimal("56.0")→true(符合要求)isDecimal("56")→false(无小数点)isDecimal(".")→false(小数点后无数字)isDecimal("15.a")→false(包含非数字字符)isDecimal("15.")→false(小数点后无数字)isDecimal("15.#")→false(包含非数字字符)
如果你的需求要求小数点前必须有至少一个数字(即不允许".123"这类格式),只需把正则表达式修改为:
let decimalPattern = #"^\d+\.\d+$"#
内容的提问来源于stack exchange,提问作者adil Raza
相关产品推荐
相关产品推荐

