Verifique si la cadena de entrada ingresada por el usuario está en formato como IIPIII, donde I es un número entero, se puede usar cualquier número de un dígito en lugar de I y P es un carácter. Ejemplo si la entrada es 32P125, es una cadena válida; de lo contrario, N23P33 no es válida.

Intenté usar string.Length o string.IndexOf("P") pero ¿cómo validar otros valores enteros?

c#
-2
darkking 10 sep. 2018 a las 13:23

5 respuestas

La mejor respuesta

Teniendo en cuenta que 'P' tiene que coincidir literalmente:

      using System;
      using System.Text.RegularExpressions;

      public class Program
      {
        public static void Main()
        {
            string st1 = "32P125";
            string st2 = "N23P33";
            Regex rg = new Regex(@"\d{2}P\d{3}");
            // If 'P' is not to be matched literally, reeplace above line with below           one
            // Regex rg = new Regex(@"\d{2}[A-Za-z]\d{3}");
            Console.WriteLine(rg.IsMatch(st1));
            Console.WriteLine(rg.IsMatch(st2));
        }
      }

Salida

True
False

1
njras 10 sep. 2018 a las 10:37

Estoy seguro de que alguien puede ofrecer una respuesta más sucinta, pero la coincidencia de patrones es el camino a seguir.

using System.Text.RegularExpressions;


string test = "32P125";

// 2 integers followed by any upper cased letter, followed by 3 integers.
Regex regex = new Regex(@"\d{2}[A-Z]\d{3}", RegexOptions.ECMAScript); 
Match match = regex.Match(test);

if (match.Success)
{
    //// Valid string   
}
else
{
    //// Invalid string
}
2
IronAces 10 sep. 2018 a las 10:55

Se puede encapsular en un simple if:

string testString = "12P123";
if(
    // check if third number is letter
    Char.IsLetter(testString[2]) &&
    // if above succeeds, code proceeds to second condition (short-circuiting)
    // remove third character, after that it should be a valid number (only digits)
    int.TryParse(testString.Remove(2, 1), out int i)
) {...}
0
Michał Turczyn 10 sep. 2018 a las 10:36

Recomendaría el uso de MaskedTextProvided sobre Regex.

Esto no solo se ve más limpio sino que también es menos propenso a errores.

El código de muestra se vería así:

    string Num = "12P123";

    MaskedTextProvider prov = new MaskedTextProvider("##P###");
    prov.Set(Num);

    var isValid = prov.MaskFull;

    if(isValid){

        string result = prov.ToDisplayString();     
        Console.WriteLine(result);
    }
0
Adriani6 10 sep. 2018 a las 10:40

Utilice Expresión regular para este tipo de cosas.

-2
Mudit Singh 10 sep. 2018 a las 10:31