Cocoa 验证十六进制值的NSString

Cocoa 验证十六进制值的NSString,cocoa,nsstring,Cocoa,Nsstring,我正在开发一个自定义NSFormatter。 我需要一步一步地验证用户输入。。。我想通过isPartialStringValid:检查字符串是否只包含允许的字符“0123456789ABCDEF”。 如何验证此条件?是否可以使用NSString函数检查字符串是否只包含一些字符?您可以创建一个自定义的NSCharacterSet,其中包含允许的字符(+characterSetWithCharactersInString:),然后使用rangeOfCharacterFromSet:对字符串进行测试。

我正在开发一个自定义NSFormatter。 我需要一步一步地验证用户输入。。。我想通过
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 })