C# 正则表达式如何实现仅允许字母、至多1个空格和1个连字符的输入校验
代码问题修正
你的原有代码存在3个问题:
- 字符串转义错误:C#普通字符串中
\是转义符,你写的\w会被识别为非法转义序列,运行会报错,要么给字符串前加@声明为逐字字符串,要么把\写成\\。 - 正则规则不符合需求:你写的
[- ]?仅允许最多出现1个「空格或连字符」,但需求是最多1个空格加最多1个连字符,两者可以同时存在,总共最多2个特殊字符。 \w匹配范围不符合要求:\w不仅匹配英文字母,还会匹配数字、下划线,甚至部分Unicode的文字字符,不符合「仅允许包含英文字母」的要求。
最终实现代码
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { Console.WriteLine("enter your Name"); string enterUser = Console.ReadLine().Trim(); // 可选:去除首尾空白 // 正则规则:最多1个连字符、最多1个空格,其余字符仅允许英文字母 string pattern = @"^(?![^-]*-[^-]*-)(?![^ ]* [^ ]* )[a-zA-Z -]+$"; if (Regex.IsMatch(enterUser, pattern)) { Console.WriteLine("match"); } else { Console.WriteLine("no match"); } } }
正则规则说明
(?![^-]*-[^-]*-):负向预查,禁止字符串中出现2个及以上的连字符(?![^ ]* [^ ]* ):负向预查,禁止字符串中出现2个及以上的空格[a-zA-Z -]+:限定整个字符串仅能包含英文字母、空格、连字符,且不能为空
校验效果验证
| 输入内容 | 校验结果 |
|---|---|
Jean-MArc | 匹配 |
Jean--Marc | 不匹配(多个连字符) |
el meyda | 匹配 |
Jean-Luc Picard | 匹配(1个连字符+1个空格) |
Jean Luc Picard | 不匹配(多个空格) |
Jean123 | 不匹配(包含数字) |
内容的提问来源于stack exchange,提问作者JohninPAris
相关产品推荐
相关产品推荐

