正则表达式校验需求:引号需成对出现或不使用
正则表达式修正:实现引号成对校验需求
问题描述
原正则表达式 [-0-9a-zA-Z \/_:.,;=\'{0,2}"{0,2}\s]+$ 用于校验内容是否仅包含字母、数字及指定特殊字符(- _ , . ; ' " / =),但单引号(')和双引号(")的校验逻辑失效——无法限制引号必须成对出现(仅允许0次或2次,禁止1次)。
修正后的正则表达式
^(?=(?:[^']*'[^']*')?$)(?=(?:[^"]*"[^"]*")?$)[-0-9a-zA-Z \/_:.,;='"\s]+$
逻辑说明
- 引号次数控制:
(?=(?:[^']*'[^']*')?$):通过正向预查确保单引号仅出现0次或2次(?=(?:[^"]*"[^"]*")?$):通过正向预查确保双引号仅出现0次或2次
- 合法字符范围:
[-0-9a-zA-Z \/_:.,;='"\s]+限定所有字符必须是字母、数字、指定特殊字符或空格
校验示例
- 允许通过:
- 无引号:
hello; max - 成对双引号:
"hello; max" - 成对单引号:
'hello; max'
- 无引号:
- 禁止通过:
- 单个双引号:
"hello; max - 单个单引号:
hello'; max - 奇数个引号:
'''hello; max
- 单个双引号:
内容的提问来源于stack exchange,提问作者be MrZulf
相关产品推荐
相关产品推荐

