C#中的正则表达式用于检测单词之间的多个空格

时间:2010-12-24 09:17:02

标签: c# asp.net regex

我需要在C#中使用正则表达式来验证TextBox。我需要在ValidationExpress中为ASP.NET中的验证控件添加此角色。正则表达式不应该允许这样:

  • 更多单词之间的空格
  • 同时考虑字符串的开头和结尾

有什么想法吗?

8 个答案:

答案 0 :(得分:2)

无需正则表达式。

if (string.StartsWith(" ") || string.EndsWith(" ") || string.Contains("  ")) throw...

答案 1 :(得分:2)

我相信你想要:

 if (myText.Split(" ", StringSplitOptions.RemoveEmptyEntries).Length != 
     myText.Split(" ").Length)
 {
    //String contains multiple spaces
 }

正如你现在所说的,你想要正则表达式,我会使用

 @"\s\s+"

匹配两个或更多个空格或:

 @"\ \ +"

匹配两个或多个空格。

答案 2 :(得分:2)

如果您仅限于验证字符串,请尝试以下模式(example):

^[ ]?([^ ]+[ ])*[^ ]*$

它不允许在字符串中的任何位置包含两个空格的字符串。顺便说一下,这种模式忽略了制表符和换行符。我已经选择了[ ],因此您可以看到空格,但是一个简单的空间是相同的。 \s可能不适合您。例如,它可能与Windows新行\r\n匹配。

同样,您可以使用否定前瞻(example):

^(?!.*[ ]{2})

如果您使用的是客户端验证器,则需要从头到尾进行匹配,因此请使用模式(?!.*[ ]{2}).*。它隐含地在您的模式周围添加^...$ 无论哪种方式,考虑使用自定义验证器并编写一行简单的代码来否定搜索两个空格。这是它的完成方式。首先,look at the documentation在页面中添加JavaScript函数:

function noTwoSpaces(source, arguments) {
    arguments.IsValid = (arguments.Value.indexOf('  ') == -1);
}

接下来,添加CustomValidator控件以使用它:

<asp:CustomValidator ID="CustomValidator1" runat="server" 
    ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage=":-(" 
    ClientValidationFunction="noTwoSpaces"></asp:CustomValidator>

就是这样。比难以捉摸的正则表达容易得多。

答案 3 :(得分:1)

var rex = new Regex(@“\ s {2,}”);

编辑:没有看到字符串的开头/结尾。

        string poo = "a b";
        string poo1 = "a  b";
        string poo2 = "a   b";
        string poo3 = "a    b";
        string poo4 = " a  b";
        string poo5 = "a   b ";
        string poo6 = " a    b ";
        string poo7 = " a b ";
        var rex = new Regex(@"^\s{0}.\s{0,1}.\s{0}$");

        Console.WriteLine(rex.IsMatch(poo));
        Console.WriteLine(rex.IsMatch(poo1));
        Console.WriteLine(rex.IsMatch(poo2));
        Console.WriteLine(rex.IsMatch(poo3));
        Console.WriteLine(rex.IsMatch(poo4));
        Console.WriteLine(rex.IsMatch(poo5));
        Console.WriteLine(rex.IsMatch(poo6));
        Console.WriteLine(rex.IsMatch(poo7));

返回:

True
False
False
False
False
False
False
False

因为唯一有效的字符串是第一个。

答案 4 :(得分:0)

如果您想使用正则表达式,请使用:

 {2,}

(注意:括号前有空格)。

答案 5 :(得分:0)

可以在没有正则表达式的情况下完成,但是如果不使用正则表达式则不太明显:

\s{2,}\s\s+如果.NET不支持match-min-max语法(我不记得)。

答案 6 :(得分:0)

这样的东西
string s = " tada  bling zap  ";
Regex reg = new Regex(@"\s\s+");
MatchCollection m = reg.Matches(s);

答案 7 :(得分:0)

开头和结尾没有空格^[^\s](.*\s.*)+[^\s]$

Mary bought a shoe匹配

MarySqeezeIntoAshoe没有匹配