Admitir sólo caracteres alfanuméricos en una cadena – c# .net string

Pregunta:


Necesito admitir sólo caracteres alfanuméricos en una cadena y en la cual también pueda tener espacios blancos involucrados (es decir, "hola 1234" debe ser válida, pero NO "hola []"). Tengo el siguiente código:

string campo = string.Empty;
            do
            {
                Console.WriteLine("Ingrese un string no vacio: ");
                campo = Console.ReadLine();

            } while (String.IsNullOrEmpty(campo) && campo.All(c => Char.IsLetterOrDigit(c)));

            Console.WriteLine("TEXTO: " + campo);

Para realizar esto, utilice la funciones Char.IsLetterOrDigit pero no me funciona ya que al poner símbolos,guiones o un espacio vacio ¨{}[]- me lo admite igual y se me muestra el pantalla y no vuelve a pedir el ingreso de datos.

PRUEBA:

ENTRADA:

{}[]

SALIDA OBTENIDA:

{}[]

SALIDA ESPERADA:

Ingrese un string no vacio:

Preguntado por: byte96

sstan

Tu condición en el WHILE es incorrecta. Debería ser:

while (String.IsNullOrEmpty(campo) || !campo.All(c => Char.IsLetterOrDigit(c)))

Nota los 2 cambios:

  1. OR en vez de AND.
  2. NOT en frente de la segunda condición (mientras NO tenga los caracteres esperados… seguimos pidiendo una cadena)

Edición

Si deseas permitir espacios también, con tal que la cadena no se componga de espacios solamente, puedes usar la condición siguiente:

while (String.IsNullOrWhiteSpace(campo)
    || !campo.All(c => Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c)))

Fuente

Tags:, ,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *