Add Dash to Java Regex
I am trying to modify an existing Regex expression being pulled in from a properties file from a Java program that someone else built.
The current Regex expression used to match an email address is -
RR.emailRegex=^[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_]+$
That matches email addresses such as abc.xyz@example.com , but now some email addresses have dashes in them such as abc-def.xyz@example.com and those are failing the Regex pattern match.
What would my new Regex expression be to add the dash to that regular expression match or is there a better way to represent that?
Basing on the regex you are using, you can add the dash into your character class:
RR.emailRegex=^[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_]+$
add
RR.emailRegex=^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+$
Btw, you can shorten your regex like this:
RR.emailRegex=^[w.-]+@[w-]+.[w-]+$
Anyway, I would use Apache EmailValidator instead like this:
if (EmailValidator.getInstance().isValid(email)) ....
Meaning of - inside a character class is different than used elsewhere. Inside character class - denotes range. eg 0-9 . If you want to include - , write it in beginning or ending of character class like [-0-9] or [0-9-] .
You also don't need to escape . inside character class because it is treated as . literally inside character class.
Your regex can be simplified further. w denotes [A-Za-z0-9_] . So you can use
^[-w.]+@[w]+.[w]+$
In Java, this can be written as
^[-w.]+@[w]+.[w]+$
The correct Regex fix is below.
OLD Regex Expression
^[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_]+$
NEW Regex Expression
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$
链接地址: http://www.djcxy.com/p/92878.html
下一篇: 将短划线添加到Java正则表达式
