1

編集済み

文字列の長さが8以上で、数字のみが含まれているかどうかを確認する正規表現の記述方法。少なくとも1つの英字が含まれている必要があります。例えば:

  1. 1234567-有効
  2. 1234a5678-有効
  3. 12345678-長さが8で、アルファベットが含まれていないため、無効です。
4

5 に答える 5

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;
    }
}
于 2012-07-26T08:19:29.770 に答える
0

C# を使用している場合は、生活を簡素化し、2 つの別個の正規表現を使用できます。

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]*$");
}
于 2012-07-26T08:54:20.160 に答える
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]+$");
    }
}
于 2012-07-26T07:41:53.427 に答える
0

正規表現を作成してテストしたい場合は、遠慮なくこのregex.powertoy.orgを使用してください。

于 2012-07-26T07:43:53.550 に答える
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*)+)$");
}
于 2012-07-26T07:28:11.513 に答える