2011-05-31 31 views
14

he utilizado el siguiente código pero está volviendo falsa aunque debe devolver verdaderocaracteres cheque alfanuméricos en cadena en C#

string check,zipcode; 
zipcode="10001 New York, NY"; 
check=isalphanumeric(zipcode) 

public static Boolean isAlphaNumeric(string strToCheck) 
{ 
    Regex rg = new Regex("[^a-zA-Z0-9]"); 

    //if has non AlpahNumeric char, return false, else return true. 
    return rg.IsMatch(strToCheck) == true ? false : true; 
} 
+1

Debe aflojarlo para que permita espacios y comas. – Marko

+0

Hay ',' char en su cadena de muestra – Stecya

+0

http://stackoverflow.com/q/336210/82449 podría ayudar. –

Respuesta

44

Prueba con esto:

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

Es más undestandable, si se especifica en la expresión regular, lo que debe contener la cadena, y no lo que no debe.

En el ejemplo anterior:

  • ^- significa inicio de la cadena
  • [] * - podría contener cualquier número de caracteres entre paréntesis
  • a-zA-Z0-9 - cualquier alfanumérica personajes
  • \ s - ningún carácter de espacio (espacio/tAB/etc.)
  • , - comas
  • $ - final de la cadena
+0

Esta es la única respuesta correcta en esta página. Tenga en cuenta que esta expresión regular también permite una cadena que está completamente vacía. Entonces reemplazaría el * con un +. La coma no es alfanumérica, por lo que el nombre de la función es engañoso. Si desea una versión más corta, puede escribir: @ "^ [\ w \ s,] + $" – Elmue

5

10001 New York, NY contiene una coma y espacios - No alfanumérica

Es necesario ajusta tu expresión para permitir comas y espacios.

Además, es probable que desee cambiar el nombre de la función para que quede claro para otros desarrolladores que es más un validador que una función isAlphaNumeric().

1

Cuando^está en [] significa todo menos estos caracteres.

23
public static bool IsAlphaNumeric(string strToCheck) 
    { 
     return strToCheck.All(char.IsLetterOrDigit); 
    } 
+1

-1. No permite espacio o coma –

+10

¡La coma no es un carácter alfanumérico! – Elmue

+0

@Elmue Todavía encuentro esta respuesta más general y más útil. No estaba buscando una solución que me diera letras, dígitos y algunos caracteres de puntuación únicos. Busqué en Google una solución para letras y dígitos, y esta respuesta me sirve mejor. –

0
tring check,zipcode; 
zipcode="10001 New York, NY"; 
check=isalphanumeric(zipcode) 

    public static Boolean isAlphaNumeric(string strToCheck) 
      { 
       Regex rg = new Regex("[^a-zA-Z0-9]"); 

       //if has non AlpahNumeric char, return false, else return true. 
       return rg.IsMatch(strToCheck) == true ? false : true; 
      } 

este código de retorno siempre es falsa, porque el symbole^significa que es esta cadena no contiene ningún caracter alfanumérico, es necesario eliminar la presente^

+0

Tu respuesta es incorrecta. El^no es el único error. Incluso después de eliminarlo, seguirá siendo incorrecto. Hay muchos errores en esta expresión regular. ¿Crees que ganarás reputación con respuestas como estas? – Elmue

0

En mis días de Perl, habría utilizado esta expresión regular:

\ w +

lo que significa que uno o más carácter de palabra. Un personaje de palabras es básicamente a-zA-Z0-9 y básicamente no le importa la puntuación o los espacios. Así que si lo que desea es asegurarse de que no hay calle detrás de valor en la cadena, esto es lo que he utilizado en C#:

public static Boolean isAlphaNumeric(string strToCheck) 
{ 
    Regex rg = new Regex(@"\w+"); 
    return rg.IsMatch(strToCheck); 
} 

Gracias a Chopikadze para la estructura básica.

Creo que este sería más rápido ya que en lugar de revisar toda la cadena, se detendría en la primera instancia de un carácter de palabra y devolvería un verdadero.

+0

Esta respuesta también es incorrecta. Su expresión regular no permite espacios y solo BÚSQUEDA cualquier palabra DENTRO de la cadena dada. NO verifica que toda la cadena ES alfanumérica. ¡Entonces tu respuesta tiene múltiples errores! – Elmue

0

que necesitaba un método para ver si la cadena contiene ninguna alfanumérica, sin necesidad de utilizar expresiones regulares ...

public static bool ContainsAlphaNumeric (cadena strToCheck) { foreach (char c en strToCheck) { si (carbonizarse.IsLetterOrDigit (c)) { return true; } } return false; }

Cuestiones relacionadas