如何编写正则表达式?

时间:2012-07-26 07:18:45

标签: c# .net regex

EDITED

如何编写正则表达式,检查字符串的长度是否为8或更多,并且它只包含数字,那么它应至少包含一个字母字符。例如:

  1. 1234567 - 有效
  2. 1234a5678 - 有效
  3. 12345678 - 无效,因为它的长度为8,且不包含任何字母

5 个答案:

答案 0 :(得分:1)

因为问题改变了我的初始正则表达式解决方案将不再起作用。事实上,现在使用单个正则表达式很难。另一种选择:

bool Validate(string s) {
    int numDigits = s.Count(c => char.IsNumber(c));
    if (numDigits <= 7) {
        return numDigits == s.Length;
    } else {
        int numLetters = s.Count(c => char.IsLetter(c));
        return numLetters > 0 && numDigits + numLetters == s.Length;
    }
}

答案 1 :(得分:0)

试试这个Regex

^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$

你的代码可以这样:

var str = new List<string> {"1234567", "1234a5678", "12345678"};
foreach (string s in str)
{
    var isValid = Regex.IsMatch(s, @"^(\d{0,7}|(\d*[a-zA-Z]\d*)+)$");
}

答案 2 :(得分:0)

int Digits(string input) {
{
   int count = 0;
   foreach (char c in str)
   {
      if (c > '0' && c < '9')
          count++;
   }
   return count;
}

bool IsValid(string input)
{
    if (Digits(input) <= 8) {
        // is numeric
        return Regex.IsMatch(input, @"^[0-9]+$");
    }
    else {
        // has alpha && is alpha-numeric
        return Regex.IsMatch(input, @"[a-zA-Z]+") && Regex.IsMatch(input, @"^[0-9a-zA-Z]+$");
    }
}

答案 3 :(得分:0)

如果你想创造&amp;测试你的正则表达式,不要犹豫使用这个regex.powertoy.org

答案 4 :(得分:0)

如果您使用的是c#,您可以简化生活并使用两个单独的正则表达式:

bool res = false;
string str = // your string
if (str < 8) 
{
    res = Regex.IsMatch(str, @"^[0-9]+$");
}
else 
{
    res = Regex.IsMatch(str, @"^(?=[a-zA-Z0-9]*[a-zA-Z])[a-zA-Z0-9]*$");
}