Leo una cadena desde la consola. ¿Cómo me aseguro de que solo contenga caracteres y dígitos en inglés?¿Cómo verifico que una cadena está en inglés?
Respuesta
Suponiendo que por "caracteres en inglés" que simplemente se refieren a los 26 caracteres del alfabeto latino, esto sería un área donde me gustaría utilizar expresiones regulares: ^[a-zA-Z0-9 ]*$
Por ejemplo:
if(Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$"))
{ /* your code */ }
El beneficio de las expresiones regulares en este caso es que lo único que realmente importa es si una cadena coincide con un patrón: en este caso las expresiones regulares funcionan maravillosamente. Claramente captura su intención, y es fácil de ampliar si la definición de "caracteres ingleses" se expande más allá de solo los 26 alfabéticos.
Hay un series of articles here decente que enseña más sobre las expresiones regulares.
La respuesta de Jørn Schou-Rode proporciona una gran explicación de cómo la expresión regular presentada aquí funciona para coincidir con su entrada.
Es posible que también desee incluir espacios en blanco; "a b c" devuelve falso para el patrón de expresión regular dado. –
... y puntuación – Joe
¿Y qué hay de los caracteres de puntuación de lujo como el carácter de elipsis (...) o los apóstrofos rizados? Estos tienen sus propios caracteres Unicode. –
Se podría compararlo con esta expresión regular: ^[a-zA-Z0-9]*$
^
coincide con el inicio de la cadena (es decir, no hay caracteres están permitidos antes de este punto)[a-zA-Z0-9]
partidos cualquier letra A a la Z en el inferior o superior caso, así como los dígitos 0-9*
permite la repetición partido anterior cero o más veces$
coincide con el final del st anillo (es decir, no se permiten caracteres después de este punto)
Para utilizar la expresión en un programa en C#, se tendrá que importar System.Text.RegularExpressions
y hacer algo como esto en su código:
bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$");
Si se va a probar una gran cantidad de líneas contra el patrón, es posible que desee para compilar la expresión:
Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled);
for (int i = 0; i < 1000; i++)
{
string input = Console.ReadLine();
pattern.IsMatch(input);
}
Tenga en cuenta que este patrón devolverá falso si la cadena de entrada contiene un espacio. –
bool AllAscii(string str)
{
return !str.Any(c => !Char.IsLetterOrDigit(c));
}
Bueno para determinar si una cadena tiene un carácter no válido ... – IAbstract
IsLetterOrDigit será verdadero para cualquier letra Unicode. No solo para ingles ¿Estoy en lo correcto? –
Tiene un resultado falso según lo que pruebo. –
Algo como esto (si desea controlar la entrada):
static string ReadLettersAndDigits() {
StringBuilder sb = new StringBuilder();
ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) {
char c = char.ToLower(keyInfo.KeyChar);
if (('a' <= c && c <= 'z') || char.IsDigit(c)) {
sb.Append(keyInfo.KeyChar);
Console.Write(c);
}
}
return sb.ToString();
}
¿tiene acceso web? Supongo que no se puede garantizar, pero Google tiene una API de idioma que detectará el idioma que le pasa. google language api
Si yo no wnat de usar expresiones regulares, y sólo para proporcionar una solución alternativa, sólo puede comprobar el código ASCII de cada carácter y si se encuentra entre ese rango, sería o bien ser una letra Inglés o un número (Esto puede no ser la mejor solución):
foreach (char ch in str.ToCharArray())
{
int x = (int)char;
if (x >= 63 and x <= 126)
{
//this is english letter, i.e.- A, B, C, a, b, c...
}
else if(x >= 48 and x <= 57)
{
//this is number
}
else
{
//this is something diffrent
}
}
http://en.wikipedia.org/wiki/ASCII para la tabla ASCII completo.
Pero sigo pensando que RegEx es la mejor solución.
Esta respuesta incorrecta confunde ASCII por "inglés". – tchrist
Acepto las respuestas de Expresión regular. Sin embargo, podría simplificarlo simplemente a "^ [\ w] + $". \ w es cualquier "carácter de palabra" (que se traduce en [a-zA-Z_0-9] si utiliza un alfabeto que no sea unicode. No sé si también desea caracteres de subrayado.
Más sobre expresiones regulares en .net aquí:. http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic8
bool onlyEnglishCharacters = !EnglishText.Any(a => a > '~');
Parece barato, pero funcionó para mí, una respuesta fácil de fiar creo que sirve a nadie
'NUL',' BEL' y otros caracteres ASCII de gama baja son todos menos que "~", lo que hace que esto sea mucho más frágil de lo necesario.Agrega un '|| a <'0' 'y estarías más cerca de una solución :-) –
Como muchos señalaron, respuesta aceptada sólo funciona si hay una sola palabra. en la cadena. Como no hay respuestas que cubran el caso de varias palabras o incluso oraciones en la cadena, aquí está el código:
stringToCheck.Any(x=> char.IsLetter(x) && !((int)x >= 63 && (int)x <= 126));
Otra forma es comprobar si IsLower e IsUpper no son verdaderos. Algo así como:
private bool IsAllCharEnglish(string Input)
{
foreach (var item in Input.ToCharArray())
{
if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item))
{
return false;
}
}
return true;
}
y para el uso que:
string str = "فارسی abc";
IsAllCharEnglish(str); // return false
str = "These are english 123";
IsAllCharEnglish(str); // return true
<?php
$string="हिन्दी";
$string="Manvendra Rajpurohit";
echo strlen($string); echo '<br>';
echo mb_strlen($string, 'utf-8');
echo '<br>';
if(strlen($string) != mb_strlen($string, 'utf-8'))
{
echo "Please enter English words only:(";
}
else {
echo "OK, English Detected!";
}
?>
Prueba este sencillo truco y estoy seguro de que lo disfrutas ... –
- 1. ¿Cómo verifico si una clase está definida?
- 2. cómo capitalizar cadena de Inglés en Emacs
- 3. ¿Cómo verifico si un repositorio está vacío?
- 4. ¿Cómo verifico si una variable Smarty ya está asignada?
- 5. Cómo enviar una cadena Unicode que no esté en inglés usando el encabezado HTTP?
- 6. Contando palabras en inglés en una cadena aleatoria
- 7. ¿Cómo ejecutar el código que está en una cadena?
- 8. Buscar todas las subcadenas (en inglés) de una cadena determinada
- 9. ¿Cómo verifico los métodos que tiene un objeto en Python?
- 10. ¿Cómo verifico una firma DKIM en PHP?
- 11. ¿Cómo verifico que una aplicación de Android está firmada con un certificado de versión?
- 12. Cómo verifico si Debug está habilitado en web.config
- 13. Cómo verifico si el usuario está conectado en Javascript
- 14. ¿Cómo verifico que el usuario instaló una aplicación de iPhone?
- 15. ¿Cómo verifico si un MSI particular está instalado?
- 16. ¿Cómo verifico si una cadena es un MD5 válida o cadena
- 17. ¿Cómo verifico si un dispositivo está ejecutando iOS 6?
- 18. Cómo verifico si el escáner está enchufado (C#, .NET TWAIN)
- 19. ¿Cómo verifico si un dispositivo USB dado está enchufado?
- 20. Cómo asegurar que el usuario envíe solo texto en inglés
- 21. Cómo verifico que un elemento no existe en Selenium 2
- 22. .Net: ¿Cómo verifico si hay caracteres ilegales en una ruta?
- 23. ¿Cómo la entropía de una cadena de texto en inglés significa baja calidad?
- 24. ¿Cómo encontrar si una cadena tiene todas las letras en inglés o en árabe
- 25. ¿Cómo verifico si un valor de una cadena es una dirección IP
- 26. ¿Cómo comprobar si una cadena está en una matriz?
- 27. Cómo elegir una palabra aleatoria en inglés de una lista
- 28. ¿Cómo verifico attr() vacío en jquery?
- 29. ¿Cómo verifico/verifico/pruebo/valido mi contraseña de SSH?
- 30. ¿Cómo verificar si una cadena de php contiene solo letras y dígitos en inglés?
Qué son los “caracteres en inglés” para usted (por no hablar del hecho de que los guiones de idiomas son bastante diferentes cosas e Inglés utiliza el Escritura latina)? "Ingenuo" es una palabra en inglés perfectamente válida, pero contiene una carta que no es ASCII. Si su dominio es de hecho "cadena de palabras en inglés", debe ser mucho más cuidadoso que si solo quiere decir "cadenas de letras y dígitos ASCII". – Joey
@Johannes Rössel ¡buen punto! –
Un poco sorprendido de que nueve personas piensen que esta pregunta es "útil y clara" cuando "solo contiene caracteres y dígitos en inglés" es muy muy ambigua ... – AakashM