基于Go 1.19的特定格式字符串正则验证需求
Go 1.19 正则表达式验证方案
正则表达式说明
针对你给出的有效/无效字符串规则,这个正则可满足验证需求:^(?i)(?:[a-z]+(?:\s+[a-z]+)*\s+(?:\d+(?:%|$))|(?:\d+(?:%|$))\s+[a-z]+(?:\s+[a-z]+)*)$
规则拆解:
(?i):开启大小写不敏感模式,兼容earn/Earn这类大小写变体^和$:锚定整个字符串,确保没有额外字符混入- 匹配两种有效结构之一:
- 字母短语 + 数字(可选带%):
[a-z]+(?:\s+[a-z]+)*\s+(?:\d+(?:%|$)),保证至少有一组由空格分隔的字母内容,后跟数字(可带%) - 数字(可选带%) + 字母短语:
(?:\d+(?:%|$))\s+[a-z]+(?:\s+[a-z]+)*,保证数字(可带%)后跟至少一组由空格分隔的字母内容
- 字母短语 + 数字(可选带%):
- 仅允许字母、数字、空格、%这几类字符,其他特殊字符会被判定为无效
Go 1.19 代码示例
package main import ( "fmt" "regexp" ) func main() { pattern := `^(?i)(?:[a-z]+(?:\s+[a-z]+)*\s+(?:\d+(?:%|$))|(?:\d+(?:%|$))\s+[a-z]+(?:\s+[a-z]+)*)$` re, err := regexp.Compile(pattern) if err != nil { fmt.Println("正则编译失败:", err) return } testCases := []string{ "Earn extra 20%", "Earn 20% extra", "earn extra 20%", "earn 20% extra", "Earn 20", // 有效示例 "Earn ", "20", "Earn ^&", // 无效示例 } for _, tc := range testCases { if re.MatchString(tc) { fmt.Printf("'%s' 是有效字符串\n", tc) } else { fmt.Printf("'%s' 是无效字符串\n", tc) } } }
运行验证结果
执行上述代码会输出:
'Earn extra 20%' 是有效字符串
'Earn 20% extra' 是有效字符串
'earn extra 20%' 是有效字符串
'earn 20% extra' 是有效字符串
'Earn 20' 是有效字符串
'Earn ' 是无效字符串
'20' 是无效字符串
'Earn ^&' 是无效字符串
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

