C# 如何确定用户是否输入了连字符?

C# 如何确定用户是否输入了连字符?,c#,regex,hyphen,C#,Regex,Hyphen,我的用户不允许为输入字段提供大量单词。我是这样抓到的: Regex invalidWordPatten = new Regex(@"(^|\s)\b(test|unknown|as above|soos bo|na|n/a|delete|u|none|geen|0|ontbreek|nil|same as|no address available|same as)\b", RegexOptions.IgnoreCase); 用户也不允许只输入连字符。我无法计算它在这个正则表达式中的位置。有人

我的用户不允许为输入字段提供大量单词。我是这样抓到的:

 Regex invalidWordPatten = new Regex(@"(^|\s)\b(test|unknown|as above|soos bo|na|n/a|delete|u|none|geen|0|ontbreek|nil|same as|no address available|same as)\b", RegexOptions.IgnoreCase);

用户也不允许只输入连字符。我无法计算它在这个正则表达式中的位置。有人吗

您可以创建另一个正则表达式来检查连字符字符,这将有助于您的代码干净易读:

Regex hyphenChar = new Regex(@"\b[^-]+\b", RegexOptions.IgnoreCase);
Regex invalidWordPatten = new Regex(@"(^|\s)\b(test|unknown|as above|soos bo|na|n/a|delete|u|none|geen|0|ontbreek|nil|same as|no address available|same as)\b", RegexOptions.IgnoreCase);

var isNotMatch = hyphenChar.Match(...) && invalidWordPatten.Match(...)

刚刚测试:您确实只需要在模式的开头添加
-|
,以匹配任何连字符,并且-据我所知,您的代码逻辑-如果用户键入
-
,她/他将收到警告:

-|(^|\s)\b(test|unknown|as above|soos bo|na|n/a|delete|u|none|geen|0|ontbreek|nil|same as|no address available|same as)\b
^^
那么,我猜你有点像

if (invalidWordPatten.IsMatch(input))
{
    MessageBox.Show("Incorrect input!", "Error"); // or any other handling code part
}

请参见

只需在开头添加
-
,并对
n/a
进行转义,如下所示:
n\/a
No
\/
在C中是必需的。.NET正则表达式中没有正则表达式分隔符,
/
不是一个特殊的正则表达式字符。为了澄清:在C中不需要
\/
,意味着在.NET正则表达式模式中不需要转义正斜杠。@user2301328:有任何反馈吗?