Как я могу ограничить специальные символы в UITextField, кроме точки и подчеркивания?

Если вы знаете фиксацию, которая удалила файл (ы), запустите эту команду, где <SHA1_deletion> - это фиксация, которая удалила файл:

git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 --

Часть перед каналом перечисляет все файлы которые были удалены в фиксации; все они проверяются с предыдущей фиксации, чтобы восстановить их.

29
задан Tamás Sengel 17 April 2018 в 21:44
поделиться

10 ответов

Попробуйте приведенный ниже блок кода, он отлично сработал.

SWIFT 3.0

let ACCEPTABLE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let cs = NSCharacterSet(charactersIn: ACCEPTABLE_CHARACTERS).inverted
    let filtered = string.components(separatedBy: cs).joined(separator: "")

    return (string == filtered)
}

Цель C

#define ACCEPTABLE_CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {
      NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];

      NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

      return [string isEqualToString:filtered];
}

Надеюсь, это будет работать и для вас.

93
ответ дан Piyush Sanepara 17 April 2018 в 21:44
поделиться

Попробуйте это

NSCharacterSet  *set= [NSCharacterSet symbolCharacterSet];
if ([string rangeOfCharacterFromSet:[set invertedSet]].location == NSNotFound) {
    // valid
} else {
    // invalid
}

, вы можете сделать свой собственный набор с

NSCharacterSet  *set= [NSCharacterSet characterSetWithCharactersInString:@"<all your symbols you want to ignore>"];
4
ответ дан amar 17 April 2018 в 21:44
поделиться

NSString *Regex = @"[A-Za-z0-9^]*";

NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", Regex];

[TestResult evaluateWithObject:@"YourTestString"];

Последнее возвращаемое логическое значение true / false

В методе

+ (BOOL) validateSpecialCharactor: (NSString *) text {
NSString *Regex = @"[A-Za-z0-9^]*";
NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", Regex];
return [TestResult evaluateWithObject:text];
}
3
ответ дан ChintaN -Maddy- Ramani 17 April 2018 в 21:44
поделиться

Свифт 2,2 на основе ответа Мрунала :

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.";
func textField(
    textField: UITextField,
    shouldChangeCharactersInRange range: NSRange,
    replacementString string: String)
    -> Bool
{
    let set = NSCharacterSet(charactersInString: notAllowedCharacters);
    let inverted = set.invertedSet;

    let filtered = string
        .componentsSeparatedByCharactersInSet(inverted)
        .joinWithSeparator("");
    return filtered == string;

}
3
ответ дан Community 17 April 2018 в 21:44
поделиться

Решение Swift 3.1


let ACCEPTABLE_CHARACTERS = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let cs = CharacterSet(charactersIn: ACCEPTABLE_CHARACTERS).inverted
        let filtered: String = (string.components(separatedBy: cs) as NSArray).componentsJoined(by: "")
        return (string == filtered)
    }
2
ответ дан Sourabh Sharma 17 April 2018 в 21:44
поделиться

Это может помочь вам попробовать это ... и дайте мне знать, пожалуйста.

-(BOOL)isHaveSpecialChar:(NSString*)str{
NSString *customStr = @"~`!@#$%^&*()+=-/;:\"\'{}[]<>^?, ";
NSCharacterSet *alphaSet = [NSCharacterSet characterSetWithCharactersInString:customStr];
BOOL isHaveSpecialChar = [[str stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];
return !isHaveSpecialChar;
}
1
ответ дан SachinVsSachin 17 April 2018 в 21:44
поделиться

Swift 4

let RISTRICTED_CHARACTERS = "'*=+[]\\|;:'\",<>/?%"

Метод делегата UITextField:

func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool {
    let set = CharacterSet(charactersIn: RISTRICTED_CHARACTERS)
    let inverted = set.inverted
    let filtered = string.components(separatedBy: inverted).joined(separator: "")
    return filtered != string
}
1
ответ дан Sunil Targe 17 April 2018 в 21:44
поделиться

Попробуйте это:

NSString *str = @"___asdf.SHiv._.l.asg.  g.g._ASdgASG_.......asfgads.g.   .._____fdgdsfghsdfgh";

    str= [str stringByReplacingOccurrencesOfString:@"." withString:@""];
    str=[str stringByReplacingOccurrencesOfString:@"_" withString:@""];
    str=[str stringByReplacingOccurrencesOfString:@" " withString:@""];
    str=[str stringByTrimmingCharactersInSet:[NSCharacterSet alphanumericCharacterSet]];

    if ([str isEqualToString:@""]) {
        NSLog(@"valid");
    }
    else {
        NSLog(@"invalid");
    }
-1
ответ дан shivam 17 April 2018 в 21:44
поделиться
func  textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let set = NSCharacterSet(charactersIn: "0123456789")
    let inverted = set.inverted;

    let filtered = string.components(separatedBy: inverted).joined(separator: "")
    return filtered == string;
0
ответ дан GOWTHAM 17 April 2018 в 21:44
поделиться
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let cs = NSCharacterSet.decimalDigits.inverted
    let filtered = string.components(separatedBy: cs).joined(separator: "")
    return (string == filtered)
}
0
ответ дан Aleksey Mazurenko 17 April 2018 в 21:44
поделиться