【问题标题】:c# regular expressions, allow numbers and letters only not workingc#正则表达式,只允许数字和字母不起作用
【发布时间】:2013-02-07 18:19:23
【问题描述】:

我正在使用 ASP.NET MVC。

我需要一个只允许数字和字母的正则表达式,而不是空格或“,.;:~^”之类的东西。纯数字和字母。

另一件事:2个字符不能连续重复。

所以我可以有 123123 但不能有 1123456。

我知道了:

Regex ER1 = new Regex(@"(.)\\1", RegexOptions.None);

Regex ER2 = new Regex(@"[A-Z0-9]", RegexOptions.IgnoreCase);

我无法在一个表达式中全部完成,我仍然有一些字符通过。

这是我的整个测试代码:

class Program
{
    static void Main(string[] args)
    {
        string input = Console.ReadLine();

        Regex ER1 = new Regex(@"(.)\\1", RegexOptions.None);

        Regex ER2 = new Regex(@"[A-Z0-9]", RegexOptions.IgnoreCase);

        if (!ER1.IsMatch(input) && ER2.IsMatch(input))
            Console.WriteLine( "Casou");
        else
            Console.WriteLine( "Não casou");

            Console.ReadLine();
    }
}

我发现这些表达方式非常复杂,我很乐意在这方面得到一些帮助。

【问题讨论】:

  • 这听起来像你在设置 evil 密码限制。不要那样做。
  • 好吧,我实际上不知道代码将如何使用。我的老板需要它。我做。就这么简单 :D 但如果我现在猜测你提到了它,我觉得这就是他需要它的原因。大声笑你是怎么认识人的?

标签: c# regex asp.net-mvc expression


【解决方案1】:

让我们试试这个:

@"^(([0-9A-Z])(?!\2))*$"

解释:

^               start of string
 (              group #1
   ([0-9A-Z])   a digit or a letter (group #2)
   (?!\2)      not followed by what is captured by second group ([0-9A-Z])
 )*             any number of these
$               end of string

 

?! 组称为negative lookahead assertion

 

LastCoder 的表达式是等价的)

【讨论】:

  • 你有一个额外的反斜杠
  • 糟糕,以普通字符串开头
  • 你的也不管用。正则表达式 ER = new Regex(@"^(([0-9A-Z])(?!\\2))*$", RegexOptions.None);不让我打字。不过还是谢谢
  • 天哪。好的。这个现在完美无缺。据我所知。太感谢了。我想我现在要在工作中获得金星了哈哈哈。感谢大家的努力、时间和帮助。来自巴西的问候。塞萨尔。 ;)
  • 对不起,我在这里是为了正则表达式,而不是 C#。尽管您的评论中有不平衡的括号:[RegularExpression(@"^(([0-9A-Z])(?!\2))*$")]
【解决方案2】:

这样的东西应该可以工作

@"^(?:([A-Z0-9])(?!\1))*$"

【讨论】:

  • 我以这种方式对其进行了测试,但它不起作用:我不知道我是否做错了什么。 static void Main(string[] args) { 字符串输入 = Console.ReadLine();正则表达式 ER = new Regex(@"^(?:([A-Z0-9])(?!\1))*$", RegexOptions.None); if (ER.IsMatch(input)) Console.WriteLine("Casou");否则 Console.WriteLine("Não casou"); Console.ReadLine();它不接受这种方式的信件。只有数字。但是点和昏迷也被屏蔽了。
  • 哦。好的。我明白了。现在这几乎是完美的。唯一缺少的是“不重复”的东西。例如。如果我输入 123123 它应该会通过,但如果我写 1233 则不会。它不应该让我连续重复 2 个字符。
  • 您的答案在我上面给出的示例中非常有效。但我不能让它作为一个属性工作。为什么呢? [Required(ErrorMessage = "Required")] [RegularExpression(@"^(([0-9A-Z])(?!\2))*$", ErrorMessage = "Required")]
猜你喜欢
  • 2011-12-29
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多