正则表达式校验:检测字符串是否包含非允许词汇
校验字符串是否仅包含指定词汇的正则表达式方案
需求回顾
需要验证输入字符串是否仅由以下预定义词汇/短语(含空格的完整短语)以及分隔它们的空格组成:
What isplusminusmultiplied bydivided by
若存在上述内容之外的任意字符(如单词、数字等),则判定为存在无效内容。
正则表达式实现
1. 验证字符串完全合法(匹配成功则无无效内容)
^\s*(?:What is|plus|minus|multiplied by|divided by)(?:\s+(?:What is|plus|minus|multiplied by|divided by))*\s*$
2. 检测是否存在无效内容(匹配成功则说明有未认可内容)
^(?!\s*(?:What is|plus|minus|multiplied by|divided by)(?:\s+(?:What is|plus|minus|multiplied by|divided by))*\s*$).+
逻辑说明
合法验证正则:
^和$锚定整串,确保没有遗漏字符\s*允许字符串前后出现任意空白(包括无空白)- 非捕获组
(?:...)匹配单个允许的词汇/短语 (?:\s+(?:...))*支持多个允许词汇用空格分隔,*表示可以有0个或多个后续词汇(即单个词汇也合法)
无效检测正则:
基于合法验证逻辑添加负向预查(?!...),如果字符串不符合合法规则,就会匹配整个字符串,直接判定存在无效内容。
示例测试
- 合法输入:
What is minus multiplied by→ 匹配合法正则,无无效内容 - 非法输入:
What is plus abc divided by→ 匹配无效检测正则,确认存在未认可的abc
内容的提问来源于stack exchange,提问作者Abhijit Sarkar
相关产品推荐
相关产品推荐

