繁体   English   中英

如何快速从UItextfield中读取特定格式(XXX.X)?

[英]How to read a specific format ( XXX.X ) from UItextfield in swift?

我想从文本字段中以XXX.X格式快速读取文本。假设以XXX.X格式表示:

  • 123.3有效
  • 48.2有效
  • 1.4有效
  • 4有效
  • 4.3.4无效
  • 5555.5无效
  • 123.34无效

换句话说,如果用户未输入“。”,则句点左侧的文本最多只能有3个字符,而左侧的文本最多只能有1个字符或完全没有字符。

目前,我的代码仅适用于“。”数量的限制。

func textField(textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool
{
    let countdots = textField.text.components(separatedBy: ".").count)! - 1

    if countdots > 0 && string == "."
    {
        return false
    }
    return true
}

尝试这样的事情(正则表达式可能是错误的,您需要自己修复)

-(BOOL)isValidValue:(NSString *)checkString{
    NSString *stricterFilterString = @"^[0-9]{1,3}[.][0-9]{1}";
    NSPredicate *valueTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stricterFilterString];
    return [valueTest evaluateWithObject:checkString];
}

测试:

NSLog(@"%@", [self isValidValue:@"123.3"] ? @"YES" : @"NO");

[更新]

对于Swift 3

func valueCheck(_ checkString: String) -> Bool {   
    var result = false
    do {
        let regex = try RegularExpression(pattern: "^[0-9]{1,3}[.][0-9]{1}", options: [])
        let results = regex.matches(in: checkString, options: [], range: NSMakeRange(0, checkString.characters.count))
        if results.count > 0 {
            return true
        } else {
           return false
        }
    } catch let error as NSError {
        print("invalid regex: \(error.localizedDescription)")
    }
    return false
}
func valid(_ s:String) -> Bool {
    func roundToPlaces(value:Double, places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return round(value * divisor) / divisor
    }
    if let num = Double(s) {
        if num >= 1000.0 {
            return false
        }
        if roundToPlaces(value:num, places:1) != num {
            return false
        }
        return true
    } else {
        return false
    }
}

测试您的输入:

let test = [
    "123.3",
    "48.2",
    "1.4",
    "4",
    "4.3.4",
    "5555.5",
    "123.34"
]

for s in test {
    print(valid(s))
}

结果:

true
true
true
true
false
false
false

这就是您的输入和所需的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM