验证NSString的十六进制值

Mat*_*oal 9 cocoa nsstring

我正在开发一个自定义的NSFormatter.我需要逐步验证用户输入...我想检查isPartialStringValid:字符串是否只包含允许的字符"0123456789ABCDEF".我该如何验证这种情况?是否有一种方法使用NSString函数来检查字符串是否只包含一些字符?

Fra*_*rew 17

这种方法适合你吗?

    NSString *string = @"FF";

    NSCharacterSet *chars = [[NSCharacterSet 
        characterSetWithCharactersInString:@"0123456789ABCDEF"] invertedSet];

    BOOL isValid = (NSNotFound == [string rangeOfCharacterFromSet:chars].location);
Run Code Online (Sandbox Code Playgroud)


paw*_*222 10

雨燕5

extension String {
    var isHexNumber: Bool {
        filter(\.isHexDigit).count == count
    }
}

print("text1".isHexNumber) // false
print("aa32".isHexNumber) // true
print("AD1".isHexNumber) // true
Run Code Online (Sandbox Code Playgroud)


Ole*_*ann 5

您可以创建一个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
}
Run Code Online (Sandbox Code Playgroud)