Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex to check string contains only Hex characters

I have never done regex before, and I have seen they are very useful for working with strings. I saw a few tutorials (for example) but I still cannot understand how to make a simple Java regex check for hexadecimal characters in a string.

The user will input in the text box something like: 0123456789ABCDEF and I would like to know that the input was correct otherwise if something like XTYSPG456789ABCDEF when return false.

Is it possible to do that with a regex or did I misunderstand how they work?

like image 626
pondigi Avatar asked Mar 15 '11 20:03

pondigi


2 Answers

Yes, you can do that with a regular expression:

 ^[0-9A-F]+$ 

Explanation:

 ^            Start of line. [0-9A-F]     Character class: Any character in 0 to 9, or in A to F. +            Quantifier: One or more of the above. $            End of line. 

To use this regular expression in Java you can for example call the matches method on a String:

boolean isHex = s.matches("[0-9A-F]+"); 

Note that matches finds only an exact match so you don't need the start and end of line anchors in this case. See it working online: ideone

You may also want to allow both upper and lowercase A-F, in which case you can use this regular expression:

 ^[0-9A-Fa-f]+$ 
like image 101
Mark Byers Avatar answered Oct 08 '22 12:10

Mark Byers


May be you want to use the POSIX character class \p{XDigit}, so:

^\p{XDigit}+$

Additionally, if you plan to use the regular expression very often, it is recommended to use a constant in order to avoid recompile it each time, e.g.:

private static final Pattern REGEX_PATTERN =          Pattern.compile("^\\p{XDigit}+$");  public static void main(String[] args) {     String input = "0123456789ABCDEF";     System.out.println(         REGEX_PATTERN.matcher(input).matches()     );  // prints "true" } 
like image 39
Paul Vargas Avatar answered Oct 08 '22 13:10

Paul Vargas