Cocoa 验证十六进制值的NSString
我正在开发一个自定义NSFormatter。 我需要一步一步地验证用户输入。。。我想通过Cocoa 验证十六进制值的NSString,cocoa,nsstring,Cocoa,Nsstring,我正在开发一个自定义NSFormatter。 我需要一步一步地验证用户输入。。。我想通过isPartialStringValid:检查字符串是否只包含允许的字符“0123456789ABCDEF”。 如何验证此条件?是否可以使用NSString函数检查字符串是否只包含一些字符?您可以创建一个自定义的NSCharacterSet,其中包含允许的字符(+characterSetWithCharactersInString:),然后使用rangeOfCharacterFromSet:对字符串进行测试。
isPartialStringValid:
检查字符串是否只包含允许的字符“0123456789ABCDEF”。
如何验证此条件?是否可以使用NSString函数检查字符串是否只包含一些字符?您可以创建一个自定义的
NSCharacterSet
,其中包含允许的字符(+characterSetWithCharactersInString:
),然后使用rangeOfCharacterFromSet:
对字符串进行测试。如果返回的范围等于字符串的整个范围,则有一个匹配项
另一个选项是与NSRegularExpression
匹配
示例代码Swift:
func isValidHexNumber() -> Bool {
guard isEmpty == false else { return false }
let chars = CharacterSet(charactersIn: "0123456789ABCDEF").inverted
return uppercased().rangeOfCharacter(from: chars) == nil
}
这个方法对你有用吗
NSString *string = @"FF";
NSCharacterSet *chars = [[NSCharacterSet
characterSetWithCharactersInString:@"0123456789ABCDEF"] invertedSet];
BOOL isValid = (NSNotFound == [string rangeOfCharacterFromSet:chars].location);
在swift 2.1中,您可以通过以下方式扩展字符串:
extension String {
func isValidHexNumber() -> Bool {
let chars = NSCharacterSet(charactersInString: "0123456789ABCDEF").invertedSet
guard self.uppercaseString.rangeOfCharacterFromSet(chars) != nil else {
return false
}
return true
}
}
斯威夫特5
Swift一号班轮,不添加任何延长件:
myString.allSatisfy(\.isHexDigit)
在Swift 5.2中引入了使用keypath
谓词之前,您可以使用:
myString.allSatisfy({ $0.isHexDigit })
myString.allSatisfy({ $0.isHexDigit })