I have got confused most of the times, I need to escape special characters when specifying a regular expression.
Let us take an example of simple date format
dd/mm/yyyy
There are two ways, you can specify your regular expression
// Please note that your regular expression literal object must be surrounded // between forward slashes as is done below. // Since forward slash (/) has a special meaning in regular expressions // it need to be escaped by a backslash (\) var regex = /^\d{2}\/\d{2}\/\d{4}$/ regex.test("01/04/1975"); /* / -- Used to signify that a regex literal follows. * ^ - Starts with * \d{2} - 2 digits (date) * \/ - Escaping the forward slash * \d{2} - 2 digits (Month) * \/ - Escaping the forward slash * \d{4} - 4 digits (Year) * $ - end of string. * / - specifies the end of regex literal. */ // Things become more complex when you want to specify // regular expression in a String // Please note the difference between the regex literal and the string regex // Here we have to escape the backslash as well. // So the number of backslashes are doubled. var regex = new RegExp("^\\d{2}\\/\\d{2}\\/\\d{4}"); /* * ^ - Starts with * \\d{2} - 2 digits (date) * \\/ - Escaping the forward slash * \\d{2} - 2 digits (Month) * \\/ - Escaping the forward slash * \\d{4} - 4 digits (Year) * $ - end of regex. */
Please note that you have to escape all those characters which have a special meaning in Regular expressions.
Just place a backslash before that character. (2 backslashes if you are specifying regex as a string literal)
List of characters that need to be escaped are :
[, ], ., ?, *, +, /, \, {, }, |, (, )
Related Post : http://javakafunda.blogspot.com/2011/06/10-java-regular-expression-examples-you.html
As i understand 'd' here stands for digit then this regex wont give correct dates like it will parse the value 99/99/9999 while its not a valid date.. isn't it?
ReplyDeleteDear aashu,
ReplyDeleteYes, you are absolutely right. But this example is not a very precise regular expression for date validation.
If you want to write a exact date validator, just have a look at the link given in the post, 10 java regular expressions that you must know. :)
Please note that it is always better to use ^ in the beginning and $ in the end.
ReplyDeletevar REAL_NUMBER = new RegExp("\\d+(\\.\\d+)?");
alert(REAL_NUMBER.test("333aad"));
The above code will give you alert true.
Correct code:
var REAL_NUMBER = new RegExp("^\\d+(\\.\\d+)?$");