如何修改现有Java正则表达式满足指定字符串校验规则
正则修改方案
最终可用正则(默认非空场景)
^(?![\s/])(?!.*//)[a-zA-Z0-9-?\/:;(){}\[\]|`~´.\,'+÷ !@#$£%^"&*_<>=àáâäçèéêëìíîïñòóôöùúûüýßÀÁÂÄÇÈÉÊËÌÍÎÏÒÓÔÖÙÚÛÜÑ\\]*[^/]$
如果需要兼容空字符串,使用下面的版本:
^(?![\s/])(?!.*//)(?:[a-zA-Z0-9-?\/:;(){}\[\]|`~´.\,'+÷ !@#$£%^"&*_<>=àáâäçèéêëìíîïñòóôöùúûüýßÀÁÂÄÇÈÉÊËÌÍÎÏÒÓÔÖÙÚÛÜÑ\\]*[^/])?$
规则实现说明
你之前组合负向预查失败的核心原因是预查的放置位置不对,需要把所有限制规则的预查放在字符匹配逻辑的最前面:
^(?![\s/]):负向预查,直接限制开头不能是空格也不能是/,替换你之前写的^[^\s],避免匹配到不在允许字符集范围内的开头字符(?!.*//):负向预查,遍历整个字符串,禁止任意位置出现连续的//- 中间部分保留了你原有的允许字符集,无需调整
- 末尾的
[^/]:限制最后一个字符不能是/
注意事项
如果是在代码的字符串变量中写该正则,注意对反斜杠做双重转义,不同语言的转义规则略有差异,可根据实际使用场景调整。
内容的提问来源于stack exchange,提问作者Bogdan
相关产品推荐
相关产品推荐

