如何编写同时排除冒号、含至少一个单词字符的正则表达式
符合需求的正则表达式实现
你可以用正向先行断言把两个校验规则组合起来,最终正则为:/^(?=.*\w)[^:]+$/
规则拆解
^:匹配字符串的起始位置(?=.*\w):正向先行断言,不消耗字符,仅校验字符串中至少存在1个单词字符(字母、数字、下划线)[^:]+:匹配1个及以上的非冒号字符,保证整个字符串不含冒号$:匹配字符串的结束位置,确保校验覆盖整个字符串
校验效果验证
匹配成功的场景
- 字符串
' h-73 \r\n\t':含单词字符h、7、3,无冒号,符合规则 - 字符串
' hey':含单词字符h、e、y,无冒号,符合规则 - 字符串
'hi ':含单词字符h、i,无冒号,符合规则 - 字符串
'7':含单词字符7,无冒号,符合规则
匹配失败的场景
- 全空白字符串
' \r\n\t'/' ':无单词字符,不满足(?=.*\w)断言,匹配失败 - 含冒号字符串
' sds: \r\n\t':无法通过[^:]+的全串匹配规则,匹配失败
等价写法
你也可以用负向先行断言先排除冒号,效果完全一致:/^(?!.*:).*\w.*$/
这个写法的逻辑是先校验字符串中不存在冒号,再校验至少包含1个单词字符。
内容的提问来源于stack exchange,提问作者Serhii
相关产品推荐
相关产品推荐

