agility - html parser c#
C#Eliminar caracteres especiales (7)
Así es como se vería mi versión.
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (Char.IsLetterOrDigit(c) ||
c == ''.'' || c == ''_'' || c == '' '' || c == ''%'')
sb.Append(c);
}
}
return sb.ToString();
Quiero eliminar todos los caracteres especiales de una cadena. Los caracteres permitidos son AZ (mayúsculas o minúsculas), números (0-9), subrayado (_), espacio en blanco (), porcentaje (%) o el signo de punto (.).
He intentado esto:
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if ((c >= ''0'' && c <= ''9'') || (c >= ''A'' && c <= ''Z'') || (c >= ''a'' && c <= ''z'') | c == ''.'' || c == ''_'' || c == '' '' || c == ''%'')
{ sb.Append(c); }
}
return sb.ToString();
Y esto:
Regex r = new Regex("(?:[^a-z0-9% ]|(?<=[''/"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
return r.Replace(input, String.Empty);
Pero nada parece estar funcionando. Cualquier ayuda será apreciada.
¡Gracias!
Convierta cada char en un int, luego compare su código ascii con la tabla ascii, que puede encontrar en Internet: http://www.asciitable.com/
{
char[] input = txtInput.Text.ToCharArray();
StringBuilder sbResult = new StringBuilder();
foreach (char c in input)
{
int asciiCode = (int)c;
if (
//Space
asciiCode == 32
||
// Period (.)
asciiCode == 46
||
// Percentage Sign (%)
asciiCode == 37
||
// Underscore
asciiCode == 95
||
( //0-9,
asciiCode >= 48
&& asciiCode <= 57
)
||
( //A-Z
asciiCode >= 65
&& asciiCode <= 90
)
||
( //a-z
asciiCode >= 97
&& asciiCode <= 122
)
)
{
sbResult.Append(c);
}
}
txtResult.Text = sbResult.ToString();
}
El primer enfoque parece correcto, excepto que tienes un |
(OR en modo bit) en lugar de un ||
antes de c == ''.''
.
Por cierto, debe indicar qué no funciona (¿no se compila, o se bloquea, o produce una salida incorrecta?)
Puedes simplificar el primer método para
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (Char.IsLetterOrDigit(c) || c == ''.'' || c == ''_'' || c == '' '' || c == ''%'')
{ sb.Append(c); }
}
return sb.ToString();
Lo que parece pasar pruebas sencillas. Puedes acortarlo usando LINQ
return new string(
input.Where(
c => Char.IsLetterOrDigit(c) ||
c == ''.'' || c == ''_'' || c == '' '' || c == ''%'')
.ToArray());
private string RemoveReservedCharacters(string strValue)
{
char[] ReservedChars = {''/'', '':'',''*'',''?'',''"'', ''<'', ''>'', ''|''};
foreach (char strChar in ReservedChars)
{
strValue = strValue.Replace(strChar.ToString(), "");
}
return strValue;
}
Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty)
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (char.IsLetterOrDigit(c) || "_ %.".Contains(c.ToString()))
sb.Append(c);
}
return sb.ToString();