दिलचस्प पोस्ट
संदर्भ गिरने के नियमों का संक्षिप्त विवरण अनुरोध किया गया: (1) ए और & -> ए और, (2) ए और && -> ए और, (3) ए && & -> ए और, और (4) ए एंडएण्ड -> ए एंड ए अगर iframe src लोड करने में विफल रहता है तो त्रुटि पकड़ो। त्रुटि: – "एक फ्रेम में 'http://www.google.co.in/' प्रदर्शित करने के लिए मना कर दिया .." हठ अज्ञानता के क्या लाभ हैं? सी में "कॉन्स्ट अचूकता" क्या वॉल्यूम में परिवर्तन के लिए कोई प्रसारण कार्रवाई है? Random.choice का एक भारित संस्करण ढूँढना पथ / रूट आईफोन में मैपकेट पर दो बिंदुओं के बीच जावा में "ClassCastException" का स्पष्टीकरण कोणीय: कॉलिंग कंट्रोलर फंक्शन का उपयोग करके निर्देशक लिंक फ़ंक्शन के अंदर & फ़ंक्शन के साथ जावास्क्रिप्ट टर्नरी ऑपरेटर का उदाहरण Jquery UI datepicker तिथियों की सरणी अक्षम करें एक स्थिर वेब अनुप्रयोग में पृष्ठांकन एंड्रॉइड में पगनेटिंग टेक्स्ट कैसे इस प्रकार scoping बुलाया है? क्या अमेज़ॅन एपीआई गेटवे द्वारा लौटाए गए http स्थिति कोड को बदलने का एक तरीका है?

जांचें कि UITextField के लिए इनपुट केवल संख्यात्मक है

मैं UITextField में स्ट्रिंग इनपुट को कैसे मान्य करूं? मैं यह देखना चाहता हूं कि स्ट्रिंग संख्यात्मक है, जिसमें दशमलव अंक शामिल हैं I

वेब के समाधान से एकत्रित समाधान "जांचें कि UITextField के लिए इनपुट केवल संख्यात्मक है"

मैं अपने मैक ऐप में इस कोड का उपयोग करता हूँ, समान या इसी तरह से आईफोन के साथ काम करना चाहिए यह RegexKitLite रेगुलर एक्सप्रेशन पर आधारित है और टेक्स्ट को बदलता है जब इसकी अमान्य

 static bool TextIsValidValue( NSString* newText, double &value ) { bool result = false; if ( [newText isMatchedByRegex:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"] ) { result = true; value = [newText doubleValue]; } return result; } - (IBAction) doTextChanged:(id)sender; { double value; if ( TextIsValidValue( [i_pause stringValue], value ) ) { [i_pause setTextColor:[NSColor blackColor]]; // do something with the value } else { [i_pause setTextColor:[NSColor redColor]]; } } 

आप इसे इस तरह कुछ लाइनों में कर सकते हैं:

 BOOL valid; NSCharacterSet *alphaNums = [NSCharacterSet decimalDigitCharacterSet]; NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:myInputField.text]; valid = [alphaNums isSupersetOfSet:inStringSet]; if (!valid) // Not numeric 

– यह इनपुट मान्य करने के लिए है केवल संख्यात्मक वर्ण। अन्य विकल्पों के लिए NSCharacterSet लिए दस्तावेज़ीकरण देखें। आप मान्य इनपुट वर्णों के किसी भी सेट को निर्दिष्ट करने के लिए चरित्रसेटिंग के साथ-

आप यह कर सकते हैं कुछ तरीके हैं:

  1. NSNumberFormatter की संख्या का उपयोग करेंफ़ोमस्ट्रिंग: विधि। यह एक NSNumber वापस करेगा यदि वह स्ट्रिंग सही ढंग से पार्स कर सकता है, या nil अगर वह नहीं कर सकता।
  2. NSScanner का उपयोग करें
  3. किसी भी गैर-संख्यात्मक चरित्र को पट्टी करें और देखें कि क्या स्ट्रिंग अभी भी मेल खाता है
  4. नियमित अभिव्यक्ति का उपयोग करें

आईएमओ, जैसे कुछ का उपयोग करना -[NSString doubleValue] सबसे अच्छा विकल्प नहीं होगा क्योंकि @"0.0" और @"abc" दोनों में 0 का डबल वैल्यू होगा। * मान विधियों सभी वापसी 0 यदि वे परिवर्तित नहीं कर पा रहे हैं स्ट्रिंग ठीक से है, इसलिए @"0" की एक वैध स्ट्रिंग और एक गैर-वैध स्ट्रिंग के बीच अंतर करना मुश्किल होगा। सी की तरह कुछ strtol समारोह में एक ही मुद्दा होगा

मुझे लगता है कि NSNumberFormatter का उपयोग करना सबसे अच्छा विकल्प होगा, क्योंकि यह स्थान को खाते में लेता है (अर्थात, यूरोप में @"1,23" संख्या, संयुक्त राज्य अमेरिका में बनाम @"1.23" )।

यदि आप चाहते हैं कि उपयोगकर्ता को केवल संख्याएं दर्ज करने की अनुमति दी जाए, तो आप अपने व्यू नियंत्रक को UITextFieldDelegate के भाग को लागू कर सकते हैं और इस विधि को परिभाषित कर सकते हैं:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string]; // The user deleting all input is perfectly acceptable. if ([resultingString length] == 0) { return true; } NSInteger holder; NSScanner *scan = [NSScanner scannerWithString: resultingString]; return [scan scanInteger: &holder] && [scan isAtEnd]; } 

संभवत: अधिक कुशल तरीके हैं, लेकिन मुझे यह एक बहुत सुविधाजनक तरीका मिल रहा है। और विधि को डबल्स को मान्य करने के लिए आसानी से अनुकूल होना चाहिए या कुछ भी: बस scanDouble का उपयोग करें: या समान

 #pragma mark - UItextfield Delegate - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"("]||[string isEqualToString:@")"]) { return TRUE; } NSLog(@"Range ==%d ,%d",range.length,range.location); //NSRange *CURRANGE = [NSString rangeOfString:string]; if (range.location == 0 && range.length == 0) { if ([string isEqualToString:@"+"]) { return TRUE; } } return [self isNumeric:string]; } -(BOOL)isNumeric:(NSString*)inputString{ BOOL isValid = NO; NSCharacterSet *alphaNumbersSet = [NSCharacterSet decimalDigitCharacterSet]; NSCharacterSet *stringSet = [NSCharacterSet characterSetWithCharactersInString:inputString]; isValid = [alphaNumbersSet isSupersetOfSet:stringSet]; return isValid; } 

यहां कुछ एक लाइनर हैं जो एनएसपीडिकेट्स के साथ पीटर लुईस के उत्तर को जोड़ते हैं ( जांचें कि यूआईटीक्स्टफिल्ड के लिए एक इनपुट केवल संख्यात्मक है )

  #define REGEX_FOR_NUMBERS @"^([+-]?)(?:|0|[1-9]\\d*)(?:\\.\\d*)?$" #define REGEX_FOR_INTEGERS @"^([+-]?)(?:|0|[1-9]\\d*)?$" #define IS_A_NUMBER(string) [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_NUMBERS] evaluateWithObject:string] #define IS_AN_INTEGER(string) [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_INTEGERS] evaluateWithObject:string] 

पूर्णांक परीक्षण के लिए यह होगा:

 - (BOOL) isIntegerNumber: (NSString*)input { return [input integerValue] != 0 || [input isEqualToString:@"0"]; } 

आप अपनी स्ट्रिंग की दोहरी वैल्यू का उपयोग इस तरह कर सकते हैं

 NSString *string=@"1.22"; double a=[string doubleValue]; 

मुझे लगता है कि यह एक 0.0 के रूप में लौटा देगा यदि स्ट्रिंग अमान्य है (यह एक अपवाद फेंक सकता है, जिस स्थिति में आप इसे पकड़ सकते हैं, डॉक्स कहते हैं 0.0 यद्यपि)। अधिक जानकारी यहां

नमस्ते में एक ही समस्या थी और मुझे जवाब नहीं मिला, जो मैंने पोस्ट किया था, इसलिए यहां यह है।

मैंने अपने टेक्स्ट फ़ील्ड को आईबी के माध्यम से बनाया और जुड़ा। जब मैंने इसे नियंत्रण + ड्रैग के माध्यम से अपने कोड से कनेक्ट किया, मैंने एक्शन चुन लिया, फिर एडिटिंग चेंज्ड इवेंट को चुना। यह प्रत्येक वर्ण प्रविष्टि पर विधि को चालू करता है आप सूट के लिए एक अलग ईवेंट का उपयोग कर सकते हैं।

बाद में, मैंने पाठ को बदलने के लिए इस सरल कोड का इस्तेमाल किया। ध्यान दें कि मैंने दशमलव / अवधि के चरित्र और संख्याओं को शामिल करने के लिए अपना स्वयं का चरित्र सेट बनाया। असल में स्ट्रिंग को अमान्य वर्णों पर अलग करता है, फिर उन्हें खाली स्ट्रिंग के साथ फिर से जोड़ता है।

 - (IBAction)myTextFieldEditingChangedMethod:(UITextField *)sender { NSCharacterSet *validCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"]; NSCharacterSet *invalidCharacterSet = validCharacterSet.invertedSet; sender.text = [[sender.text componentsSeparatedByCharactersInSet:invalidCharacterSet] componentsJoinedByString:@""]; } 

क्रेडिट: सभी को निकालें लेकिन NSString से संख्याएं

खेल के लिए देर हो चुकी है लेकिन यहां एक आसान छोटी श्रेणी मैं उस स्थान का उपयोग दशमलव स्थानों के लिए और इसके लिए उपयोग किए जाने वाले स्थानीय प्रतीक के लिए करता हूं। इसके सार के लिए लिंक यहाँ है

 @interface NSString (Extension) - (BOOL) isAnEmail; - (BOOL) isNumeric; @end @implementation NSString (Extension) /** * Determines if the current string is a valid email address. * * @return BOOL - True if the string is a valid email address. */ - (BOOL) isAnEmail { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:self]; } /** * Determines if the current NSString is numeric or not. It also accounts for the localised (Germany for example use "," instead of ".") decimal point and includes these as a valid number. * * @return BOOL - True if the string is numeric. */ - (BOOL) isNumeric { NSString *localDecimalSymbol = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator]; NSMutableCharacterSet *decimalCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:localDecimalSymbol]; [decimalCharacterSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; NSCharacterSet* nonNumbers = [decimalCharacterSet invertedSet]; NSRange r = [self rangeOfCharacterFromSet: nonNumbers]; if (r.location == NSNotFound) { // check to see how many times the decimal symbol appears in the string. It should only appear once for the number to be numeric. int numberOfOccurances = [[self componentsSeparatedByString:localDecimalSymbol] count]-1; return (numberOfOccurances > 1) ? NO : YES; } else return NO; } @end 

अपने लक्ष्य को पूरा करने का सबसे अच्छा तरीका आईएमओ सामान्य कीबोर्ड के बजाय एक संख्यात्मक कीबोर्ड प्रदर्शित करना है यह प्रतिबंधित है कि उपयोगकर्ता के लिए कौन सी कुंजी उपलब्ध हैं। यह सत्यापन करने की आवश्यकता को कम करता है, और इससे भी महत्वपूर्ण यह उपयोगकर्ता को गलती करने से रोकता है। नंबर पैड संख्याओं को दर्ज करने के लिए बहुत अच्छा है क्योंकि चाबियाँ काफी बड़ी हैं

इंटरफ़ेस बिल्डर में यूआईटीईफ़िक्फिल्ड का चयन करें, एट्रिब्यूट इंस्पेक्टर पर जाएं और "कीबोर्ड टाइप" को "दशमलव पैड" में बदलें।

यहां छवि विवरण दर्ज करें

यह कुंजीपटल इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

एकमात्र काम करना बाकी है यह सुनिश्चित करना है कि उपयोगकर्ता दो दशमलव स्थानों में प्रवेश नहीं करता। आप ऐसा कर सकते हैं, जब वे संपादन कर रहे हैं अपने दृश्य नियंत्रक में निम्नलिखित कोड जोड़ें जैसे ही यह दर्ज किया जाता है, जैसे ही यह दूसरा दशमलव स्थान निकाल देता है यह उपयोगकर्ता को लगता है जैसे कि दूसरा दशमलव पहली जगह में कभी नहीं आया।

 - (void)viewDidLoad { [super viewDidLoad]; [self.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; } - (void)textFieldDidChange:(UITextField *)textField { NSString *text = textField.text; NSRange range = [text rangeOfString:@"."]; if (range.location != NSNotFound && [text hasSuffix:@"."] && range.location != (text.length - 1)) { // There's more than one decimal textField.text = [text substringToIndex:text.length - 1]; } } 
 @property (strong) NSNumberFormatter *numberFormatter; @property (strong) NSString *oldStringValue; - (void)awakeFromNib { [super awakeFromNib]; self.numberFormatter = [[NSNumberFormatter alloc] init]; self.oldStringValue = self.stringValue; [self setDelegate:self]; } - (void)controlTextDidChange:(NSNotification *)obj { NSNumber *number = [self.numberFormatter numberFromString:self.stringValue]; if (number) { self.oldStringValue = self.stringValue; } else { self.stringValue = self.oldStringValue; } } 
 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(string.length > 0) { NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:string]; BOOL stringIsValid = [numbersOnly isSupersetOfSet:characterSetFromTextField]; return stringIsValid; } return YES; } 

मैं एक पाठ क्षेत्र चाहता था जो केवल पूर्णांक को अनुमति देता है यहां बताया गया है कि मैं (एंड्रॉइड और अन्य जगहों से जानकारी का उपयोग करते हुए) के साथ समाप्त हुआ हूं:

पूर्णांक संख्या फ़ॉर्मेटर बनाएं (UIApplicationDelegate में तो इसका पुन: उपयोग किया जा सकता है):

 @property (nonatomic, retain) NSNumberFormatter *integerNumberFormatter; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Create and configure an NSNumberFormatter for integers integerNumberFormatter = [[NSNumberFormatter alloc] init]; [integerNumberFormatter setMaximumFractionDigits:0]; return YES; } 

UITextFieldDelegate में फ़िल्टर का उपयोग करें:

 @interface MyTableViewController : UITableViewController <UITextFieldDelegate> { ictAppDelegate *appDelegate; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Make sure the proposed string is a number NSNumberFormatter *inf = [appDelegate integerNumberFormatter]; NSString* proposedString = [textField.text stringByReplacingCharactersInRange:range withString:string]; NSNumber *proposedNumber = [inf numberFromString:proposedString]; if (proposedNumber) { // Make sure the proposed number is an integer NSString *integerString = [inf stringFromNumber:proposedNumber]; if ([integerString isEqualToString:proposedString]) { // proposed string is an integer return YES; } } // Warn the user we're rejecting the change AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); return NO; } 

इतना सुंदर नहीं है, लेकिन सरल 🙂

 - (BOOL) isNumber: (NSString*)input { return [input doubleValue] != 0 || [input isEqualToString:@"0"] || [input isEqualToString:@"0.0"]; } 

पुराने धागा, लेकिन यह उल्लेखनीय है कि एप्पल ने आईओएस 4.0 में NSRegularExpression का परिचय NSRegularExpression । (पीटर की प्रतिक्रिया से नियमित अभिव्यक्ति लेना)

 // Look for 0-n digits from start to finish NSRegularExpression *noFunnyStuff = [NSRegularExpression regularExpressionWithPattern:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$" options:0 error:nil]; // There should be just one match if ([noFunnyStuff numberOfMatchesInString:<#theString#> options:0 range:NSMakeRange(0, <#theString#>.length)] == 1) { // Yay, digits! } 

मैं सुझाव है कि NSRegularExpression उदाहरण को कहीं न कहीं भंडारण करना।

स्विफ्ट 3 में आईपैड और आईफ़ोन के साथ काम करने वाले एकल (।) डॉट के साथ टेक्स्ट फ़ील्ड में दशमलव मान स्वीकार करें

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let inverseSet = NSCharacterSet(charactersIn:"0123456789").inverted let components = string.components(separatedBy: inverseSet) let filtered = components.joined(separator: "") if filtered == string { return true } else { if string == "." { let countdots = textField.text!.components(separatedBy:".").count - 1 if countdots == 0 { return true }else{ if countdots > 0 && string == "." { return false } else { return true } } }else{ return false } } } 

अधिक अंतरराष्ट्रीय (और न केवल अमरीका रंगीन ;-)) होने के लिए बस ऊपर दिए गए कोड में प्रतिस्थापित करें

 -(NSNumber *) getNumber { NSString* localeIdentifier = [[NSLocale autoupdatingCurrentLocale] localeIdentifier]; NSLocale *l_en = [[NSLocale alloc] initWithLocaleIdentifier: localeIdentifier] ; return [self getNumberWithLocale: [l_en autorelease] ]; } 

यह जवाब NSFormatter का उपयोग करता है जैसा कि पहले कहा गया था। इसकी जांच – पड़ताल करें:

 @interface NSString (NSNumber) - (BOOL) isNumberWithLocale:(NSLocale *) stringLocale; - (BOOL) isNumber; - (NSNumber *) getNumber; - (NSNumber *) getNumberWithLocale:(NSLocale*) stringLocale; @end @implementation NSString (NSNumber) - (BOOL) isNumberWithLocale:(NSLocale *) stringLocale { return [self getNumberWithLocale:stringLocale] != nil; } - (BOOL) isNumber { return [ self getNumber ] != nil; } - (NSNumber *) getNumber { NSLocale *l_en = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] ; return [self getNumberWithLocale: [l_en autorelease] ]; } - (NSNumber *) getNumberWithLocale:(NSLocale*) stringLocale { NSNumberFormatter *formatter = [[ [ NSNumberFormatter alloc ] init ] autorelease]; [formatter setLocale: stringLocale ]; return [ formatter numberFromString:self ]; } @end 

मुझे उम्मीद है कि यह किसी को मदद करता है =)

  #import "NSString+Extension.h" //@interface NSString (Extension) // //- (BOOL) isAnEmail; //- (BOOL) isNumeric; // //@end @implementation NSString (Extension) - (BOOL) isNumeric { NSString *emailRegex = @"[0-9]+"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:self]; // NSString *localDecimalSymbol = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator]; // NSMutableCharacterSet *decimalCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:localDecimalSymbol]; // [decimalCharacterSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; // // NSCharacterSet* nonNumbers = [decimalCharacterSet invertedSet]; // NSRange r = [self rangeOfCharacterFromSet: nonNumbers]; // // if (r.location == NSNotFound) // { // // check to see how many times the decimal symbol appears in the string. It should only appear once for the number to be numeric. // int numberOfOccurances = [[self componentsSeparatedByString:localDecimalSymbol] count]-1; // return (numberOfOccurances > 1) ? NO : YES; // } // else return NO; } 

स्विफ्ट 4 में:

 let formatString = "12345" if let number = Decimal(string:formatString){ print("String contains only number") } else{ print("String doesn't contains only number") } 

इसमें शामिल हैं: दशमलव भाग नियंत्रण (दशमलव की संख्या अनुमत), प्रतिलिपि / पेस्ट नियंत्रण, अंतरराष्ट्रीय विभाजक।

कदम:

  1. सुनिश्चित करें कि आपका दृश्य नियंत्रक UITextFieldDelegate से प्राप्त होता है

    वर्ग MyViewController: UIViewController, UITextFieldDelegate {…

  2. ViewDidLoad में, अपने नियंत्रण प्रतिनिधि को स्वयं पर सेट करें:

    ओवरराइड फ़नस्क दृश्यडिडलोड () {super.viewDidLoad (); yourTextField.delegate = self}

  3. निम्नलिखित विधि को लागू करें और "decsAllowed" स्थिरांक को दशमलव या 0 की वांछित राशि के साथ अद्यतन करें यदि आप एक प्राकृतिक संख्या चाहते हैं

स्विफ्ट 4

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let decsAllowed: Int = 2 let candidateText = NSString(string: textField.text!).replacingCharacters(in: range, with: string) let decSeparator: String = NumberFormatter().decimalSeparator!; let splitted = candidateText.components(separatedBy: decSeparator) let decSeparatorsFound = splitted.count - 1 let decimalPart = decSeparatorsFound > 0 ? splitted.last! : "" let decimalPartCount = decimalPart.characters.count let characterSet = NSMutableCharacterSet.decimalDigit() if decsAllowed > 0 {characterSet.addCharacters(in: decSeparator)} let valid = characterSet.isSuperset(of: CharacterSet(charactersIn: candidateText)) && decSeparatorsFound <= 1 && decsAllowed >= decimalPartCount return valid } 

यदि बाद में आपको उस स्ट्रिंग को किसी संख्या में सुरक्षित रूप से कनवर्ट करने की आवश्यकता होती है, तो आप बस डबल (अपने स्ट्रिंग) या इंट (अपने स्ट्रिंग) प्रकार का कलाकार या अधिक शैक्षणिक तरीके से उपयोग कर सकते हैं:

 let formatter = NumberFormatter() let theNumber: NSNumber = formatter.number(from: yourTextField.text)!