正则表达式需求:含@gym-kk.com的邮箱串需不匹配
解决方案
要实现「只要逗号/分号分隔的邮箱列表里有一个包含@gym-kk.com,正则就不匹配」的需求,核心是先排除所有包含目标域名的情况,再匹配合法的邮箱列表。
正确正则表达式(分号分隔,适配你的测试用例)
^(?!.*@gym-kk\.com)(?:[\w+-.%]+@[\w-.]+\.[A-Za-z]+)(?:; ?[\w+-.%]+@[\w-.]+\.[A-Za-z]+)*$
正则拆解
(?!.*@gym-kk\.com):负向先行断言,扫描整个字符串,只要发现任何一处存在@gym-kk.com,直接判定不匹配,这是实现需求的关键(?:[\w+-.%]+@[\w-.]+\.[A-Za-z]+):匹配单个合法邮箱(基础规则,可根据实际邮箱格式调整)(?:; ?[\w+-.%]+@[\w-.]+\.[A-Za-z]+)*:匹配后续的分号(带可选空格)+ 邮箱的组合,支持多个邮箱
适配逗号分隔的版本
如果实际是逗号分隔的邮箱,把正则里的; ?替换成, ?即可:
^(?!.*@gym-kk\.com)(?:[\w+-.%]+@[\w-.]+\.[A-Za-z]+)(?:, ?[\w+-.%]+@[\w-.]+\.[A-Za-z]+)*$
你的旧正则问题分析
你之前写的第二个正则里,第二个分组是(; ?[\w+-.%]+@gym-kk+\.[A-Za-z]+)*,这反而会主动匹配包含@gym-kk.com的邮箱,所以才会出现「只要有该域名就匹配」的反向结果,完全搞反了需求逻辑。
内容的提问来源于stack exchange,提问作者Alig
相关产品推荐
相关产品推荐

