2

UITextField を文字のみ受け付けて、数字や特殊文字を入力するとエラーが表示されるようにしたいのですが、そうするとアルファベットを入力してもエラーが表示されてしまいます。

NSString *FNameReg=@"[A-Za-z]";
NSPredicate *FNametest=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",FNameReg];
 if(![FNametest evaluateWithObject:txtfirstname.text])
    {
        lblvalidateFName.hidden=NO;
        [testScroll setContentOffset:CGPointMake( 0 , 74)];
        return;
    }

でも今はアルファベットも入れるとエラーも表示されてしまうんですけど、そうなんですか?

4

5 に答える 5

8

次のような検証用のメソッドを 1 つ作成します。

-(BOOL) validateAlphabets: (NSString *)alpha
{
NSString *abnRegex = @"[A-Za-z]+"; // check for one or more occurrence of string you can also use * instead + for ignoring null value 
NSPredicate *abnTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", abnRegex];
BOOL isValid = [abnTest evaluateWithObject:alpha];
return isValid;
}

次のように、必要な検証を確認します。

bool checkAlphabets = [self validateAlphabets:txtfirstname.text];

if(!checkAlphabets)
{
   NSLog(@"Not Matches..");
}
else
{
  NSLog(@"Matches..");
}
于 2013-01-16T13:26:01.167 に答える
6

以下のコードでアルファベット文字列を検証できます。

使用するNSPredicate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    return [self validateStringWithAlphabet:string]; 
}

- (BOOL)validateStringWithAlphabet:(NSString *)string {
    NSString *stringRegex = @"[A-Za-z]";
    NSPredicate *stringPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];

    return [stringPredicate evaluateWithObject:string]; 
}

使用するNSCharacterSet

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 {
        if(textField == yourTextField)
        {
            NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet];
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
            return [string isEqualToString:filtered];
        }

        return YES;
 }
于 2013-01-16T12:23:11.350 に答える
2

アルファベットのみを許可する場合は、以下のコードを試してください。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{

   NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet];

   NSString *trimmedReplacement = [[ text componentsSeparatedByCharactersInSet: nonNumberSet] componentsJoinedByString:@""];

   return ([text stringByTrimmingCharactersInSet:nonNumberSet].length > 0); 

}

それが機能しているかどうかを教えてください!!!!

ハッピーコーディング!!!!!

于 2013-01-16T12:35:47.627 に答える
2
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

NSCharacterSet *blockedCharacters = [[NSCharacterSet whitespaceCharacterSet] invertedSet]; NSCharacterSet *blockedCharacters2 = [[NSCharacterSet letterCharacterSet]invertedSet]; 

if([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location)
{

 // enter your alert 
[alert show];
}
return ([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location) ;

}
于 2015-01-13T21:42:31.150 に答える