如何编写满足指定规则且至少包含一个字母的字符串匹配正则表达式
UI文本框输入校验正则修正方案
最终可用正则
^(?=.*[a-zA-Z])[a-zA-Z0-9"',-](?:[a-zA-Z0-9"',- ]*[a-zA-Z0-9"',-])?$
原正则问题
你当前使用的正则要求字符串长度最少为2,无法匹配单字符(如单独输入一个英文字母)的合法场景,若为了兼容单字符场景调整结尾匹配规则为通配,就会出现允许空格结尾的漏洞。
校验逻辑说明
- 新增
(?=.*[a-zA-Z])正向预查,强制字符串必须包含至少一个英文字母,符合规则1 - 首尾字符仅允许英文字母、数字、
"',-`四类特殊字符,天然禁止首尾出现空格,同时符合规则2、3 - 字符串中间位置允许出现空格、数字、英文字母及指定特殊字符,符合规则4、5
验证示例
- 合法输入可匹配:
a、-test、test123"、hello world、'test-case' - 非法输入拦截:
123(无英文字母)、test(首字符空格)、test(尾字符空格)、" "(无英文字母)
内容的提问来源于stack exchange,提问作者Arun Kamalanathan
相关产品推荐
相关产品推荐

