views:

2184

answers:

3

I'm looking to determine whether a string value from a user input (UITextField) is "blank" if it's not nil. Checking if [textField.text isEqualToString:""] isn't quite enough because I want to avoid any blank/whitespace input (like say a few space characters).

There does seem to be an indication of a good solution for my particular problem in this StOv post.

Basically it goes something like this, but I suspect there has to (or ought to) be a better way:

NSString *strResult;
NSScanner* scanner = [NSScanner scannerWithString:textField.text];
BOOL hasValidChars = [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] 
                                             intoString:&strResult];

// if hasValidChars == YES, we've got nonwhite space chars collected into strResult

This clearly only works for my particular circumstance, and even then it would fail if the first character was a space but the data I wanted followed. So, I realize I've been a little spoiled by Ruby, but there must be a tried and true idiom for trimming strings in Cocoa.

Aaaand the answer is already out there, my apologies:

NSString's -stringByTrimmingCharactersInSet: would do it:

Returns a new string made by removing from both ends of the receiver characters contained in a given character set.

I'm still curious to hear if anybody has other/preferred ways of doing this.

+3  A: 

You're using whitespaceAndNewlineCharacterSet, good. But instead of using scanUpToCharactersFromSet, why not use stringByTrimmingCharactersInSet? Something like this...

strResult = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

EDIT: Didn't realize you already found stringByTrimmingCharactersInSet until after I posted this.

Matt Flowers
no worries, someone should get credit for the answer, and I'd feel like a tool posting it myself ;-)
Billy Gray
One question about the result string. It looks like it is an auto-released string. So it should be be released after use, right?
David.Chu.ca
A: 

I have checked this stringByTrimmingCharactersInSet, found only the start & end white spaces only trimmed? Is there a way to trim whitespaces middle of the string. For Eample. @"+91 9381023224' Want to set as +919381023224

Any suggestions.

A: 

What you are looking for is [string stringByReplacingOccurancesOfString:@" " withString:@""]. Deleting white space in the middle of a string is not called 'trimming'. Trimming by definition works from the edges.

McShashi