【问题标题】:Regular Expression to reject special characters other than commas正则表达式拒绝逗号以外的特殊字符
【发布时间】:2011-01-19 02:43:36
【问题描述】:

我在 asp.net 工作。我正在使用正则表达式验证器

请您帮我创建一个不允许逗号以外的特殊字符的正则表达式。必须允许逗号。

我检查了 regexlib,但找不到匹配项。我与^(a-z|A-Z|0-9)*[^#$%^&*()']*$ 合作。当我将其他字符添加为无效时,它不起作用。

您能否建议我一个可以找到良好正则表达式资源的地方? regexlib 似乎很大;但是还有其他地方列出了非常有限但最常用的例子吗?

另外,我可以使用 C# 代码创建表达式吗?有什么相关的文章吗?

【问题讨论】:

标签: c# asp.net regex


【解决方案1】:
[\w\s,]+

工作正常,如下所示。

RegExr 是一个用实时结果测试你的正则表达式的好地方,它还带有一个非常完整的常用表达式列表。

[] 字符类 \w 匹配任何单词字符(字母数字和下划线)。 \s 匹配任何空白字符(空格、制表符、换行符)。 , 包含逗号 + 是贪婪匹配;这将匹配前 1 次或多次。

【讨论】:

  • [...] 被称为字符类,而不是捕获集。
【解决方案2】:

[\d\w\s,]*

只是猜测

【讨论】:

  • 您可能不应该只提交猜测作为答案。我并不是说您的答案是错误的,我只是说这不是最佳做法。另外,如果您的猜测错误,人们会投票给您,您将失去积分。
  • @Martin Milan,“\w”表示字母数字字符。所以再次 \d 是没有必要的。 \w 也会处理数字。
  • 还不错,Jordon - 没有时间测试它,但我以后会记住你的评论......
【解决方案3】:

要回答任何文章,我从这里开始,发现它是一个很好的资源:
http://www.regular-expressions.info/

对于您当前的问题,请尝试以下方法:

[\w\s,]*

这是一个细分:

  • 匹配以下列表中的单个字符 «[\w\s,]*»
    • 在零次和无限次之间,尽可能多次,按需回馈(贪婪)«*»
    • 单词字符(字母、数字等)«\w»
    • 空白字符(空格、制表符、换行符等)«\s»
    • 字符“,” «,»

【讨论】:

  • 我相信 OP 想要 nothing 但字符串中允许的字符:^[\w\s,]*$
【解决方案4】:

对于不是逗号的单个字符,[^,] 应该可以正常工作。

【讨论】:

    【解决方案5】:

    你可以试试 [\w\s,] 正则表达式。此正则表达式将仅匹配字母数字字符和逗号。如果文本中出现任何其他字符,则不匹配。

    关于正则表达式资源的第二个问题,您可以转到

    http://www.regular-expressions.info/

    这个网站有很多关于正则表达式的教程,还有很多有用的信息。

    另外,我可以使用创建表达式吗 C#代码?有没有相关的文章?

    你的意思是说你想知道正则表达式执行的类和方法吗?或者您想要为您创建正则表达式的工具?

    【讨论】:

    • 还有一个问题...如果我也不应该允许空间怎么办?我尝试使用“[\w,]*”。如果我在一个字符之后进入空格,它工作正常。如果我先进入空间,它不起作用。请帮忙
    • 要留出空间,可以使用 [\w\s,]
    【解决方案6】:

    您可以使用 C# 创建表达式,这样通常可以解决问题:

            Regex regex = new Regex(@"^[a-z | 0-9 | /,]*$", RegexOptions.IgnoreCase);
            System.Console.Write("Enter Text");
            String s = System.Console.ReadLine();
            Match match = regex.Match(s);
            if (match.Success == true)
            {
                System.Console.WriteLine("True");
            }
    
            else
            {
                System.Console.WriteLine("False");
            }
            System.Console.ReadLine();
    

    您需要导入 System.Text.RegularExpressions; 上面的正则表达式只接受数字、字母(大写和小写)和逗号。

    对于正则表达式的小介绍,我认为 MCTS 70-536 的书可能会有很大帮助,我很确定您可以从某个地方下载它或获取副本。

    我假设您从未在 C# 中使用过正则表达式,因此我提供了上面的代码。

    希望这会有所帮助。

    【讨论】:

    • 管道和空格不属于那里;它们将匹配实际的管道和空间。另外,我不确定你为什么把/ 放在那里,但它也不属于; [a-z0-9,] 就是您所需要的。除非 OP 明确声明空字符串是有效的,否则您应该使用 + 而不是 *
    • 我认为空字符串也是有效的。为我在正则表达式中犯的错误道歉,但是,当我尝试它时它确实有效,所以我不认为它是完全错误的。我会记住+的东西,感谢您的更正。
    【解决方案7】:

    谢谢大家..

    [\w\s,]* 有效

    让我浏览一下正则表达式.info,如果我需要进一步的支持,请回来。

    让我尝试 C# 代码方法,如果需要进一步支持,请回来。

    [这个论坛很棒。质量回复这么快..]

    再次感谢

    【讨论】:

    • 嗨,我指的是整数、字母和逗号
    【解决方案8】:

    (…) 表示一个分组,而不是一个用[…] 表示的字符集。所以试试这个:

    ^[a-zA-Z0-9,]*$
    

    这将只允许字母数字字符和逗号。

    【讨论】:

    • 我试过了。它允许空格作为文本框中的第一个字符。还有其他想法吗?
    • @Lijo:不可能。你如何测试它?
    • 嗨 Gumbo,我在 asp.net 中使用它如下 :RegularExpressionValidator>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多