Foros del Web » Programación para mayores de 30 ;) » Java »

Como validar que un string solo contiene ASCII

Estas en el tema de Como validar que un string solo contiene ASCII en el foro de Java en Foros del Web. Pues creo que el título es suficientemente explicativo. Necesito validar una cadena de texto asegurandome que esta formada sólo por caracteres ASCII válidos y nose ...
  #1 (permalink)  
Antiguo 06/02/2006, 11:07
 
Fecha de Ingreso: julio-2005
Mensajes: 90
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta Como validar que un string solo contiene ASCII

Pues creo que el título es suficientemente explicativo. Necesito validar una cadena de texto asegurandome que esta formada sólo por caracteres ASCII válidos y nose si existe alguna funcion ya hecha para ello.

Sino, pues se admiten ideas y sugerencias

Gracias.
  #2 (permalink)  
Antiguo 06/02/2006, 12:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Si eres capaz de definir "caracteres ASCII validos" en una expresion regular, pues puedes usar eso .
  #3 (permalink)  
Antiguo 06/02/2006, 14:57
 
Fecha de Ingreso: junio-2005
Mensajes: 286
Antigüedad: 18 años, 10 meses
Puntos: 2
puedes tambien chequear los bits del string: ASCII regular solo usa los primeros 7 bits. Tendrias que crear una mascara [de bits] para probar esto. Me viene una pregunta: A que te refieres con ASCII validos? que mas podria contener una String mas que caracteres (que son simplemente bytes)?
  #4 (permalink)  
Antiguo 06/02/2006, 15:29
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Código:
      String input = "Yo soy una cadena de ASCII válido ¿ Pasa algo? 123 ... probando.. lo que no se me ocurre ES Ascii NO VÁLIDO";
      // 
      Pattern p = Pattern.compile("^\\a|^\\b^\\c...¿ se entiende no?...^\\Z");
      Matcher m = p.matcher(input);
      if (!m.find()) { ... lo que sea ... }
Mirate http://www.programacion.com/java/art...xpresionesreg/
  #5 (permalink)  
Antiguo 06/02/2006, 17:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Cita:
[a-zA-Z] a through z or A through Z, inclusive (range)
http://java.sun.com/j2se/1.4.2/docs/...x/Pattern.html
  #6 (permalink)  
Antiguo 07/02/2006, 03:54
 
Fecha de Ingreso: julio-2005
Mensajes: 90
Antigüedad: 18 años, 9 meses
Puntos: 0
Hombre pues es que realmente no se tampoco muy bien a que se refieren con 'caracteres ASCII válidos', digamos que a mi me ha llegado el encargo de hacerlo :) .

Pues voy a ver si encuentro un listado de los caracteres ASCII válidos, y con algo parecido a lo que me ha comentado dogdug, me hago una megaexpresion formal que los contenga o algo asi.

Si la encuentro lo cuelgo aqui, por si alguien tiene que hacer algo parecido en el futuro.

Gracias a todos por las respuestas.
  #7 (permalink)  
Antiguo 07/02/2006, 04:12
 
Fecha de Ingreso: julio-2005
Mensajes: 90
Antigüedad: 18 años, 9 meses
Puntos: 0
Bien pues he estado echando un vistazo a http://www.programacion.com/java/art...xpresionesreg/ y me he econtrado con lo siguiente:
Cita:
Las expresiones regulares se rigen por una serie de normas y hay una construcción para cualquier patrón de caracteres. Una expresión regular sólo puede contener (aparte de letras y números) los siguientes caracteres:

< \$, ^, ., *, +, ?, [, ], \. >
y aunque hay algunas 'teclas especiales' definibles entre llaves, no están todas las que son.

Ademas he econtrado un listado de los caracteres ASCII, y suponiendo que ésos sean los válidos, no supondría la condicion que cito anteriormente una limitación insalvable para realizar esta validación a través de una expresion regular?

Alguna alternativa?

PD: En C podías coger un 'string' procesarlo carácter a carácter, pasando cada carácter a 'int' (lo que hacia era meter en un 'int' el numero ASCII corresponidiente) y luego comprobar que el numero está dentro del rango de caracteres válidos...
  #8 (permalink)  
Antiguo 07/02/2006, 07:44
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
En Java tambien lo puedes hacer, pero la cuestion es que si no sabes exactamente lo que ha aceptar o no tu programa, pues realizarlo sera un ejercicio de adivinacion .

Normalmente cuando te dicen eso se refieren a "numeros, letras y espaciadores", pero vamos, lo primero es que averigues exactamente lo que te piden. Es la primera regla de la informatica .
  #9 (permalink)  
Antiguo 07/02/2006, 10:36
 
Fecha de Ingreso: julio-2005
Mensajes: 90
Antigüedad: 18 años, 9 meses
Puntos: 0
Jeje, si pero lo cierto es que a estas alturas, seré yo quien decida cuales son 'los caracteres ASCII válidos'. Y he decidido que son aquellos definidos en el estandar, que coinciden con los que podeis ver en el link anterior.

Entre esos caracteres hay algunos que creo que no se pueden representar en expresiones normales. Asi que tengo dos alternativas:

A) Tiro por lo fácil y valido solo aquello que pueda con expresiones formales. (no me gusta)

B) Alguna alternativa que se os ocurra a alguno. (esta me mola mas)

Gracias y un saludo.
  #10 (permalink)  
Antiguo 07/02/2006, 11:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
No se, pero en el enlace que te pasé arriba hay varias ideas:
Cita:
...
\p{ASCII} All ASCII:[\x00-\x7F]
..
Cita:
...
\p{Graph} A visible character: [\p{Alnum}\p{Punct}]
..
.... o parecidos.
  #11 (permalink)  
Antiguo 08/02/2006, 04:05
 
Fecha de Ingreso: julio-2005
Mensajes: 90
Antigüedad: 18 años, 9 meses
Puntos: 0
Muchas gracias

Vaya debi leer con mas detenimiento :$. Muchas gracias al final he hecho un pequeño test que lo pongo a continuación para que le sirva a otro que tenga el mismo problema que yo:
Cita:
public void makeTest() throws Exception {

String input = "blañblaÏbla";
Pattern p = Pattern.compile("\\p{ASCII}");
Matcher m = p.matcher(input);
if (!m.find())
System.out.println("error");
else
System.out.println("cadena bien formada");

}
Gracias de nuevo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:32.