将 NSTextField 输入限制为字母数字

Posted

技术标签:

【中文标题】将 NSTextField 输入限制为字母数字【英文标题】:Restricting NSTextField input to alpha-numeric 【发布时间】:2014-04-29 06:21:13 【问题描述】:

我正在制作一个简单的应用程序,其中有一个 NSTextField,我只需要在其中输入字母数字字符。

谁能建议一个解决这个问题的方法?

【问题讨论】:

解决方案似乎需要子类化;见:***.com/questions/4652689/… allow only alphanumeric characters for a UITextField的可能重复 @RahulPatel 问题是关于NSTextField,而不是UITextField 【参考方案1】:

对此有内置支持。

在 Interface Builder 中,选中文本字段的“仅罗马字符”选项。

在您的代码中设置此属性:

[myTextField.cell setAllowedInputSourceLocales: @[NSAllRomanInputSourcesLocaleIdentifier]];

【讨论】:

pointum 这似乎是最好的方法,但这不起作用:(在我创建文本字段时使用此代码仍然接受特殊字符:'(【参考方案2】:
 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 
    if ([self validCharecter:textField.text)

      return YES;
  
 else

      return NO:
   
   

    -(BOOL)validCharecter :(NSString)textStr

        NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
        BOOL validStr = [[textStr stringByTrimmingCharactersInSet:alphaSet]  isEqualToString:@""];

        return validStr;
  

用dis试试,希望对你有帮助!!

【讨论】:

非常感谢回答 Raju :) 会检查一下 NSTextField 不是 UITextField,拜托!【参考方案3】:

看看下面的代码示例。 我希望这能帮到您。

 //#define CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

 //#define CHARACTERS_NUMBERS  [CHARACTERS stringByAppendingString:@"1234567890"]

///// 里面 shouldChangeCharactersInRange

//////////>>>>>>>>>>>>>>>>>>>>>

if(textField== txtFldAlpha)
    

        //Alpha only

        NSUInteger newLength = [textField.text length] + [string length] - range.length;

        NSCharacterSet *unacceptedInput =
        [[NSCharacterSet characterSetWithCharactersInString:CHARACTERS] invertedSet];

        // Create array of strings from incoming string using the unacceptable
        // characters as the trigger of where to split the string.
        // If array has more than one entry, there was at least one unacceptable character
        if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] > 1)
            return NO;
        else 
            return YES&&(newLength < 26);
        return YES;
    

///////////

//////////>>>>>>>>>>>>>>>>>>>

if(textField==txtFldNumeric)
    
        //Num only

        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

        if ([[string componentsSeparatedByCharactersInSet:nonNumberSet] count] > 1)
            return NO;
        else 
            return YES&&(newLength < 6);
        return YES;

    

///////////

//////////>>>>>>>>>>>>>>>>>>>

if(textField==txtFieldNumAlphaSpecial)
    
        //Num,Alpha,Special field

        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 50) ? NO : YES;
     

///////////

【讨论】:

您能否提及shouldChangeCharactersInRange 方法的声明位置?请注意,问题是关于 Cocoa-NSTextField。与 ios 无关。【参考方案4】:
#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];

实施

textField:shouldChangeCharactersInRange:replacementString:

在委托中,检查替换字符串是否有特殊字符,如果检测到任何替换,则禁止替换。

检查非字母数字的最简单方法如下:

if ([replacementString rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]].location != NSNotFound) 
// There are non-alphanumeric characters in the replacement string

希望这有助于交配..!

【讨论】:

非常感谢回答 iAhmed :) 会检查一下 欢迎 :)如果有帮助,请接受它作为答案 :) UITextField 不是 NSTextField 看标签 osx 可能

以上是关于将 NSTextField 输入限制为字母数字的主要内容,如果未能解决你的问题,请参考以下文章

无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]

如何将输入限制为仅接受数字?

将语音识别限制为字母数字单词

如何将 Oracle 顶点项限制为数字/字符值

easyui datagrid的editor的内容验证问题,怎么限制输入为数字和字母

如何过滤让输入框 只输入字母和数字