我正在尝试修改从其他人构建的Java程序的属性文件中提取的现有Regex表达式。
用于匹配电子邮件地址的当前Regex表达式为-
RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
Run Code Online (Sandbox Code Playgroud)
可以匹配诸如abc.xyz@example.com之类的电子邮件地址,但是现在其中一些破折号诸如abc-def.xyz@example.com之类的破折号却使 Regex模式匹配失败。
我的新Regex表达式是将破折号添加到该正则表达式匹配项是什么,还是有更好的方式来表示呢?
字符类内部的含义-与其他地方使用的含义不同。内部字符类-表示范围。例如0-9。如果要包含-,请将其写在字符类的开头或结尾,例如[-0-9]或[0-9-]。
您也不需要.在字符类内部转义,因为它被视为.字面意义上的字符类内部。
您的正则表达式可以进一步简化。\w表示[A-Za-z0-9_]. 所以你可以使用
^[-\w.]+@[\w]+\.[\w]+$
Run Code Online (Sandbox Code Playgroud)
在Java中,这可以写成
^[-\\w.]+@[\\w]+\\.[\\w]+$
Run Code Online (Sandbox Code Playgroud)
根据您使用的正则表达式,可以将破折号添加到字符类中:
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_-]+$
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你可以这样缩短你的正则表达式:
RR.emailRegex=^[\\w.-]+@[\\w-]+\\.[\\w-]+$
Run Code Online (Sandbox Code Playgroud)
无论如何,我会这样使用Apache EmailValidator:
if (EmailValidator.getInstance().isValid(email)) ....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6428 次 |
| 最近记录: |