2011-11-15 55 views
21

Tengo el siguiente regex ^[a-zA-Z0-9]+$ que permitiría caracteres alfanuméricos. El problema aquí es que si ingreso solo caracteres numéricos como "897687", la expresión regular aún coincide. No quiero que eso suceda. Debería haber al menos un carácter de texto y debería comenzar con un carácter de texto. Por ejemplo, como "a343" o "a98bder" o "a4544fgf343"C# Regex para permitir solo el alfanumérico

Sería genial si pudiera ayudarme a mejorar mi expresión regular para esto.

+2

Como acotación al margen, con "debería haber al menos un alfabeto y que debería comenzar con un alfabeto", este último significa que la primera siempre será cierto. Entonces el _requirement_ es "debería comenzar con un alfabeto". Ahora ir a la votación Rowland ya que lo entendió bastante bien :-) – paxdiablo

Respuesta

33

suena como usted quiere:

^[a-zA-Z][a-zA-Z0-9]*$ 
4
^[a-zA-Z][a-zA-Z0-9]*$ 

debe hacer el truco!

Alternativamente, si desea incluir todos los caracteres alfanuméricos, más un guión que puede utilizar:

^[a-zA-Z][\w]*$ 
+0

Whitespace definitivamente no está incluido en '\ w'. En .net es '[\ p {L} \ p {N} _]' incluye todas las letras Unicode, números y (al menos) el guión bajo. – stema

+0

@stema Lo siento error tipográfico, mi cabeza dijo guión bajo, pero mis dedos mecanografiaron el espacio en blanco. Buen lugar, gracias. –

11

Sólo en caso de que los caracteres ASCII son en algún momento no es suficiente, aquí la versión Unicode:

^\p{L}[\p{L}\p{N}]*$ 

\p{L} es cualquier punto de código Unicode que tiene la letra propiedad ==> cualquier carta de cualquier idioma (es decir en Unicode)

\p{N} es cualquier punto de código Unicode que tiene el Número ==> Cualquier carácter número desde cualquier lenguaje (es decir en Unicode)

2

Esta función devolverá verdadero o falso dependiendo de si la expresión regular se corresponde o no,

public static Boolean isAlphaNumeric(string strToCheck) 
    { 
     Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$"); 
     return rg.IsMatch(strToCheck); 
    } 
1

o un poco menos detallado de la respuesta aceptada:

^[a-zA-Z][\w]*$ 

C# expresión regular tiene indicador de clase de caracteres "\ w" para los caracteres alfanuméricos, pero no tiene una clase de caracteres por sólo alfabéticos (sin cifras), por lo tanto, debe especificar la clase establecer [a-zA-Z] manualmente.

+1

Como se describió anteriormente, [\ w] incluye el carácter de subrayado que no se solicita en la publicación original y no es equivalente a la respuesta aceptada. https://msdn.microsoft.com/en-us/library/vstudio/20bw873z(v=vs.110).aspx#WordCharacter – fractor

0

Esta es la mejor solución para comprobar alfanumérico,

  • si es sólo la cadena - "Error".
  • si solo es un número entero - "Error".
  • si es alfanumérico - "Correcto".

    if (System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[a-zA-Z]") && 
        System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[0-9]")  
    { 
        // Success - It is alphanumric 
    } 
    else 
    { 
        // Error - It is not alphanumric 
    } 
    
Cuestiones relacionadas