aspose file tools*
The moose likes Java in General and the fly likes Problem using Pattern n Matcher (REGEX) Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Problem using Pattern n Matcher (REGEX)" Watch "Problem using Pattern n Matcher (REGEX)" New topic
Author

Problem using Pattern n Matcher (REGEX)

Gurvinder Singh
Greenhorn

Joined: Nov 10, 2008
Posts: 27
Hi i have a problem where i need to put a validation on the text box that it contains only alphabets and numbers. For this i m using pattern and matcher.
I want this validation to be applied to the java file only and not on jsp page page.
My code looks like this

String securityAnswer="afj$%";
Pattern pattern = Pattern.compile("([a-z A-Z 0-9])");
Matcher matcher = pattern.matcher(securityAnswer);
boolean result = matcher.find();

How can i make sure that the text contains only a-z n 0-9 only. becoz whenever i enter any normal text with special characters it accepts on clicking the save button.
I want to write a pattern that returns true only if the securityAnswer string contains alphabets and numbers and not anything else.

Any help will be greatly appreciated.

Thanks
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18896
    
  40


The find() method is used to find() a match within the string. If you want to force the match to the whole string then you can use the matches() method instead.

BTW, you will also need to change your regex, as the way it is written, it will only match one letter.

Henry


Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
Gurvinder Singh
Greenhorn

Joined: Nov 10, 2008
Posts: 27
a code snippet would be really helpful.
i m using

boolean matchFound = pattern.matches("(?i)[a-z 0-9]", "asfSD98");

but it is returning false.

if i use

boolean matchFound = pattern.matches("(?i)[a-z]", "asfSD");

then it returns true


Thanks
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18896
    
  40

If you are going to use regexes, you should at least get up to speed on them. It's well worth it to do so. See java.util.regex.Pattern class for more info.

if i use

boolean matchFound = pattern.matches("(?i)[a-z]", "asfSD");

then it returns true


I highly doubt that. Try it again, as there is no way this can return true.

Henry
Gurvinder Singh
Greenhorn

Joined: Nov 10, 2008
Posts: 27
Hey got the solution

I did some minor change in the code as follows:

Pattern pattern = Pattern.compile("([^a-z A-Z 0-9])");
String original = "%asfSD!@";
Matcher match = pattern.matcher(original);



Thanks for the help!
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18896
    
  40

Gurvinder Singh wrote:Hey got the solution

I did some minor change in the code as follows:

Pattern pattern = Pattern.compile("([^a-z A-Z 0-9])");
String original = "%asfSD!@";
Matcher match = pattern.matcher(original);



Thanks for the help!



Hate to break the news to you -- but you really should learn regexes, if you are going to use them. All that change does is to make sure that the first character is a number, letter, or space. You can still have other characters, as long as it is not the first character (BTW, I am assuming that you are still using find()).

Henry
David Newton
Author
Rancher

Joined: Sep 29, 2008
Posts: 12617

Not letter, number, or space?
Gurvinder Singh
Greenhorn

Joined: Nov 10, 2008
Posts: 27
Hey Henry

I v tested this in number of ways by taking the input string as
the matcher.find() is returning the following results:

"%)Aas(fSD" returns true // it means the input string contains other than characters n digits
"Aas(fSD" returns true // it means the input string contains other than characters n digits
"AasfSD" returns false // it means the input string contains characters n digits
"asfSD" returns false // it means the input string contains characters n digits
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18896
    
  40

David Newton wrote:Not letter, number, or space?


Yea... sorry. Had a brain fart. Never mind.

Henry
 
 
subject: Problem using Pattern n Matcher (REGEX)