Android邮箱正则验证:如何允许含连字符的邮箱地址
邮箱正则验证适配带连字符域名的修改方案
你的正则表达式无法通过sanjeev@san-szabo.com这类邮箱,问题出在**@符号后的域名匹配规则**:原规则[a-z]+只允许纯字母,没包含连字符-,所以带连字符的域名主体会被判定为无效。
修改要点:
- 将@后的
[a-z]+替换为[a-z0-9-]+,让域名主体支持字母、数字和连字符 - 额外优化:原正则的
\\.+只能匹配单个点,改成(\\.[a-z0-9-]+)+可以支持多级域名(比如san-szabo.co.uk这类格式)
修改后的完整代码:
public static boolean isEmailValid(String email) { boolean isValid = false; String expression = "^[a-zA-Z0-9+_.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+"; Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { isValid = true; } return isValid; }
说明:
^[a-zA-Z0-9+_.-]+:保持原规则,允许邮箱前缀包含字母、数字、加号、下划线、点和连字符@[a-z0-9-]+:匹配带连字符的域名主体(比如san-szabo)(\\.[a-z0-9-]+)+:匹配域名后缀,支持多级格式,且每个后缀部分也允许连字符
内容的提问来源于stack exchange,提问作者MARSH
相关产品推荐
相关产品推荐

