2010-06-17 143 views
16

Los caracteres permitidos son (al menos) A-Z, a-z, 0-9, ö, Ö, ä, ä, Å y alemán, letón, estonio (si corresponde) caracteres especiales? ¿Hay un método listo o tengo que hacer una lista negra (caracteres no permitidos) y expresiones regulares IsMatch? Si no está listo, ¿cómo usar la lista negra?¿Cómo saber si la cadena contiene caracteres no alfanuméricos en C# /. NET 2.0?

+0

Otro hilo que tiene respuestas para considerar http://stackoverflow.com/questions/2371780/ Podría proporcionar información adicional. –

+0

posible duplicado de [.Net Regular Expression para que coincida con cualquier tipo de letra de cualquier idioma] (http://stackoverflow.com/questions/2949861/net-regular-expression-to-match-any-kind-of-letter- from-any-language) – GvS

Respuesta

30

No sé cómo se clasifican los caracteres especiales de todos los idiomas, pero puede verificar si el método Char.IsLetterOrDigit coincide con lo que desea hacer. Funciona al menos para los dígitos y letras que probé:

string test = "Aasdf345ÅÄÖåäöéÉóÓüÜïÏôÔ"; 
if (test.All(Char.IsLetterOrDigit)) { ... } 

Los Char.IsLetterOrDigit devuelve true de caracteres que se clasifican en Unicode como UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter o DecimalDigitNumber.

+0

¿Qué es prueba? ¿Todo? Eso no es un método de cuerda, ¿es algún tipo de método de extensión? ¿O un método LINQ? – Task

+0

@Task 'All' es una extensión linq de cadena. Ver http://msdn.microsoft.com/en-us/library/system.string.aspx – mydogisbox

+0

¡Ah! La sección "Métodos de extensión" de la documentación es nueva para mí, no había visto eso antes. Supongo que me he acostumbrado demasiado a encontrar todo lo que necesito en el área anterior "Propiedades" o "Métodos". ¡Gracias! – Task

5

Investigar char.IsLetterOrDigit(char).

Por ejemplo:

myString.All(c => char.IsLetterOrDigit(c)); 
+1

Simplemente curioso, pero ¿por qué fue esto downvoted? Por lo que puedo decir, es una forma perfectamente válida de hacer lo que el OP pidió. – Flynn1179

+0

Ah ... solo lo he mirado más de cerca; Nunca noté el requisito 0-9 allí.He modificado mi respuesta para usar 'IsLetterOrDigit' en lugar de' IsLetter'. – Flynn1179

+0

Una forma abreviada de esto es 'myString.All (char.IsLetterOrDigit);' – gls123

4

Una lista negra de caracteres es probable bastante grande :-)

Puede utilizar la expresión regular

^[\d\p{L}]+$ 

para que coincida con los dígitos decimales y las letras, independientemente de secuencia de comandos

Esta expresión regular consiste en una clase de caracteres que contiene los shorthands \d - que contiene todos los dígitos (230 en total en el BMP) y \p{L} que contiene todos los caracteres Unicode clasificada como una "letra" (46.817 en el BMP). Dicha clase de caracteres se repite al menos una vez e incrustada entre ^ y $ - los anclajes de inicio y fin de cadena, por lo que coincide con la cadena completa.

Para algunos motores de expresiones regulares, ya que sólo está interesado en letras latinas, al parecer, se podría también utilizar

^[\d\p{Letter}]+$ 

Sin embargo, .NET no admite esto. La primera expresión regular mencionada anteriormente realmente capta todo lo que es un dígito o una letra en cualquier secuencia de comandos. Por lo tanto, coincidirá obedientemente con los números arábigos o hindúes y con los guiones hebreos, cirílicos y otros que no sean latinos. Dependiendo de lo que quiera, esto puede no ser apropiado.

Si eso plantea un problema, entonces no veo una mejor opción que enumerar explícitamente los caracteres que desea permitir. Sin embargo, considero peligroso suponer que el texto en un determinado idioma siempre se restringe al guión de ese idioma. Si tuviera que escribir un nombre checo o polaco en un texto en alemán, probablemente necesitaría algo más que [a-zA-ZäöüÄÖÜß].

+0

+1 para \ p {option} –

+0

¡gracias! ¿Puedes explicar cómo^[\ d \ p {L}] + $ funciona? Lo revisé desde la web, pero no pude resumirlo por completo ... –

-1

Sería más sencillo hacer coincidir los caracteres permitidos con un retorno falso.

Cuestiones relacionadas