Chrome正常运行的正则表达式在Safari报错,求兼容改写方案
兼容Safari的正则改写方案
原正则的核心需求是:字符串首尾不能为空格,中间仅允许字母、数字、'、.、-、,和空格字符。由于Safari不支持后行断言(?<!...),可以通过正向匹配逻辑改写:
/^(?!\s)(?:[A-Za-z0-9'.,-\s]*[A-Za-z0-9'.,-])?$/.test('ABCD@#'); // 返回false,符合预期
逻辑说明
^(?!\s):确保字符串开头不是空格(?:[A-Za-z0-9'.,-\s]*[A-Za-z0-9'.,-])?:- 非捕获组,
?表示该组可选(兼容空字符串场景) - 内部先匹配任意数量的允许字符(包括中间空格),最后以一个非空格的允许字符结尾,保证字符串末尾不会是空格
- 非捕获组,
$:匹配字符串结束位置
如果不需要兼容空字符串(即要求至少有一个有效字符),可以简化为:
/^(?!\s)[A-Za-z0-9'.,-\s]*[A-Za-z0-9'.,-]$/.test('ABCD@#');
内容的提问来源于stack exchange,提问作者jimmy
相关产品推荐
相关产品推荐

