如何编写正则表达式验证含固定keyword的指定结构输入字符串
正则实现方案
首先直接给出满足要求的正则表达式:
/^keyword\s+(?!\d+$)[a-zA-Z0-9_]+\((?!\d+$)[a-zA-Z0-9_]+,(?!\d+$)[a-zA-Z0-9_]+\)$/
如果允许参数之间、参数和括号之间存在可选空格(比如keyword test( a1 , b2 )也判定为合法),可以调整为:
/^keyword\s+(?!\d+$)[a-zA-Z0-9_]+\(\s*(?!\d+$)[a-zA-Z0-9_]+\s*,\s*(?!\d+$)[a-zA-Z0-9_]+\s*\)$/
规则拆解说明
- 固定前缀匹配:
^keyword\s+强制字符串开头为keyword,后面跟至少一个空白字符 - 可变字段通用规则:每个
input/param_input/param_input2都用(?!\d+$)[a-zA-Z0-9_]+匹配:(?!\d+$)负向预查逻辑,排除全为数字的非法情况[a-zA-Z0-9_]+限制可变字段仅允许包含大小写字母、数字、下划线
- 结构匹配:
\(匹配左括号,,匹配参数分隔逗号,\)$匹配右括号并强制字符串在右括号处结束
原有正则的问题
- 错误将固定前缀
keyword写成了function,完全不符合需求 - 没有包含下划线的匹配规则,输入带下划线的可变字段会被误判为非法
- 没有正确实现「可变字段不能为纯数字」的判断逻辑,纯数字的字段会被误放通
- 没有匹配括号结构,也没有限制参数只能为2个,不符合给定的格式要求
测试用例参考
- 合法用例:
keyword getUser(user_id,user2_id)keyword delData123(a1,b2)
- 非法用例:
- 前缀错误:
func getUser(id1,id2) - 可变字段纯数字:
keyword 123(user,123)、keyword test(123,abc) - 字符非法:
keyword get-user(user@id,id2) - 结构错误:
keyword test(a,b,c)、keyword test[a,b]
- 前缀错误:
内容的提问来源于stack exchange,提问作者Programing
相关产品推荐
相关产品推荐

