Проверьте NSString для шестнадцатеричного значения - PullRequest
9 голосов
/ 04 ноября 2011

Я работаю над кастомным NSFormatter.Мне нужно шаг за шагом проверять пользовательский ввод ... я подумал проверить isPartialStringValid:, содержит ли строка только разрешенные символы "0123456789ABCDEF".Как я могу проверить это условие?Есть ли способ с функцией NSString, чтобы проверить, если строка содержит только некоторые символы?

Ответы [ 3 ]

17 голосов
/ 04 ноября 2011

Этот метод работает у вас?

    NSString *string = @"FF";

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

    BOOL isValid = (NSNotFound == [string rangeOfCharacterFromSet:chars].location);
3 голосов
/ 12 ноября 2015

В 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
  }

}
3 голосов
/ 04 ноября 2011

Вы можете создать пользовательский NSCharacterSet, который содержит разрешенные символы (+ characterSetWithCharactersInString:), а затем проверить строку на соответствие с rangeOfCharacterFromSet:. Если возвращенный диапазон равен всему диапазону строки, у вас есть совпадение.

Другой вариант будет соответствовать NSRegularExpression.

Пример кода Swift 3:

 func isValidHexNumber() -> Bool {
    let chars = CharacterSet(charactersIn: "0123456789ABCDEF")

    guard uppercased().rangeOfCharacter(from: chars) != nil else {
       return false
    }
    return true
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...