求兼容Safari的JS正则:禁止连续斜杠及指定外特殊字符
兼容Safari的JS正则表达式解决方案
需求说明
需要一个JavaScript正则表达式,满足以下判定规则(符合则返回true,否则返回false):
- 字符串不能包含两个连续的正斜杠
- 字符串只能包含字母、数字、连字符(-)、下划线(_)和单个正斜杠,禁止其他特殊字符
- 必须兼容Safari浏览器(不得使用负向后行断言
(?<!...),Safari不支持该语法)
此前尝试的正则/(^[\w-\/]+$)(?<!.*?\/{2,}.*$)/逻辑正确,但因依赖负向后行断言无法在Safari中运行。
解决方案
使用负向前瞻断言替代负向后行断言,实现兼容所有主流浏览器(包括Safari)的正则:
const validPattern = /^(?!.*\/\/)[\w\/-]+$/;
正则解析
^:锚定字符串起始位置(?!.*\/\/):负向前瞻,检查整个字符串中不存在连续的两个斜杠(.*匹配任意字符,\/\/匹配连续双斜杠)[\w\/-]+:匹配允许的字符集合:\w:等价于[A-Za-z0-9_],包含字母、数字、下划线\/:单个正斜杠-:连字符
$:锚定字符串结束位置
验证示例
匹配成功(返回true)的字符串:
asc/_bsjacs-h-acsacs/bgt
匹配失败(返回false)的字符串:
acs//(包含连续双斜杠)acs/@(包含非法特殊字符@)acs@(包含非法特殊字符@)
内容的提问来源于stack exchange,提问作者Saurabh Shukla
相关产品推荐
相关产品推荐

