React Native正则抛出未处理JS异常 求无后向断言的等效邮箱校验方案
问题原因
React Native 运行环境的 JS 引擎(默认的 Hermes 或低版本 JavaScriptCore)不支持 ES2018 引入的后向断言语法,你原正则末尾的 (?<!-) 属于后向否定断言,因此触发正则解析报错。
修复后的正则
修改思路为将后向断言的校验逻辑,转换为显式的字符范围限定,和原正则校验规则完全一致:
^[\w]+@((?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$
逻辑说明
原来的顶级域名校验规则 (?:[A-Za-z0-9-]{2,63}(?<!-)) 要求:
- 长度为2~63位
- 最后一位不能是连字符
-
修改后的顶级域名规则和前面子域名的校验逻辑保持一致: - 首位必须是字母/数字
- 末位必须是字母/数字
- 中间最多允许61位字母/数字/连字符
总长度天然符合2~63位的要求,同时自动满足首尾不能为连字符的规则,完全覆盖原正则的校验能力。
使用示例
const emailRegex = /^[\w]+@((?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$/ // 测试用例 emailRegex.test('user@example.com') // 返回 true emailRegex.test('user@example.com-') // 返回 false(匹配原规则禁止末尾为-的要求) emailRegex.test('user@sub-domain.example.com') // 返回 true
内容的提问来源于stack exchange,提问作者user3055126
相关产品推荐
相关产品推荐

