如何检测文本字段中是不是包含文本而不是数值?
Posted
技术标签:
【中文标题】如何检测文本字段中是不是包含文本而不是数值?【英文标题】:How do I detect if a text field has text in it rather than a numerical value?如何检测文本字段中是否包含文本而不是数值? 【发布时间】:2014-04-24 04:02:20 【问题描述】:我有一个文本字段,用户输入一个数字并转换为整数。
键盘设置为十进制数字。除了粘贴功能仍处于启用状态,因此用户可以将文本粘贴到其中。
如果用户在其中输入非数值,我想将其设置为将标签更改为@“错误”。
我不想禁用粘贴功能,因为我仍然希望用户能够将自己的数值复制并粘贴到我的应用中。
【问题讨论】:
iPhone how to check that a string is numeric only 的可能重复项 【参考方案1】:简单地禁止输入非数字字符是一种方法。但是您问的是如何检测非数字...
使用
NSRange range = [myTextField.text rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
if(range.location == NSNotFound)
// then it is numeric only
【讨论】:
美丽。非常简洁易读,是标准库的出色实现。 所以我在 if 语句中包含 label.text = @"error" 对吗? 它在 [[NSCharacterSet] 之后显示“预期标识符” 是的,可以。我不确定这是最好的用户体验。一方面,您通过仅要求非数字来混淆他们,尽管您在同一个地方显示非数字。我会考虑一个仅询问数字的弹出标签 - 不是模式对话框,只是一个提示,在文本字段附近很容易看到。 (该代码中有一个错字 - 但现在已修复) 你想要 iPatel 的答案 - 如果遇到非数字字符,则从 shouldChangeCharactersInRange 返回 NO。您可以在该函数中使用我提供的代码,并在它说“仅是数字”的地方返回 YES,否则返回 NO。【参考方案2】:如果你想应用只能输入数值的限制,那么使用UITextField
的委托方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0) || [string isEqualToString:@""];
如果字符串是数字,这将返回 YES,否则返回 NO。
编辑:
@Adam 的答案是检查文本是否仅是数字的最佳答案。
【讨论】:
我不明白该把它放在哪里,我应该做些什么来让它与相应的文本字段相关联? @user3567176 - 阅读roseindia.net/tutorial/iphone/examples/… 还是迷路了,很抱歉我对编码很陌生。我不知道该怎么做! 在 .h 文件中声明 UITextFieldDelegate 然后声明 textValue.delegate = self;进入viewDidLoad方法,在.m文件中然后使用上面这个方法stringByTrimmingCharactersInSet:
仅从字符串的开头和结尾删除非数字字符,因此例如 0000aaa000
不会被更改,尽管它确实包含非数字值,但它是否有效。当用户将字符串粘贴到文本字段中时,这是一种可能性。【参考方案3】:
NSRange range = [myTextField.text rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
【讨论】:
以上是关于如何检测文本字段中是不是包含文本而不是数值?的主要内容,如果未能解决你的问题,请参考以下文章