Java - uso de Pattern y Matcher

   
Vista:

uso de Pattern y Matcher

Publicado por gonzalo (84 intervenciones) el 09/11/2015 21:06:05
hol a todos

estoy tratando de usar este Patter y matcher para validar una direccion IP, lo que veo es que si escribo letras las acepta.

me pueden ayudar a modificar el patter para que acepte solo 4 grupos de 3 numeros?
otra cosa, si encuentra caracteres no admitidos, como los detecto y cancelo el filtro?

gracias.

salu2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Texto="1234.1.22.333a";
 
p = Pattern.compile("([0-9]+).([0-9]+).([0-9]+).([0-9]+)");
m = p.matcher(Texto);
 
    if (m.find())
    {
      // get the two groups we were looking for
      String group1 = m.group(1);
      String group2 = m.group(2);
      String group3 = m.group(3);
      String group4 = m.group(4);
 
      // print the groups, with a wee bit of formatting
      System.out.format("'%s'.'%s'.'%s'.'%s'\n", group1, group2, group3, group4);
    }

salida

'1234'.'1'.'22'.'333'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet

uso de Pattern y Matcher

Publicado por Lawliet (238 intervenciones) el 09/11/2015 22:13:30
Hola...

Prácticamente el error se debe a tu expresión regular, investigando por Internet encontré la siguiente dirección, espero te sea de utilidad ya que le di una revisada y se ve muy completo los ejemplos con sus respectivos ejemplos.

http://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

uso de Pattern y Matcher

Publicado por Tom (912 intervenciones) el 09/11/2015 23:32:52
¿ Por qué usas find() ? Deberías leerte la documentación de Matcher.

1
2
3
4
5
6
7
8
9
10
11
public static void main(String args[]) {
		String txt = "11.22.33.44a";
		Pattern p = Pattern.compile("([0-9]+).([0-9]+).([0-9]+).([0-9]+)");
		Matcher m = p.matcher(txt);
 
		if(m.matches()) {
			System.out.printf("'%s'.'%s'.'%s'.'%s'\n", m.group(1), m.group(2), m.group(3), m.group(4));
		} else {
			System.out.printf("%s is bad!\n", txt);
		}
	}

De todos modos, yo me inclinaría por otras soluciones ...

1
2
3
4
5
6
7
8
static void validate(String txt) {
		try {
			InetAddress addr = InetAddress.getByName(txt);
			System.out.printf("%s is OK!\n", txt);
		} catch(UnknownHostException ex) {
			System.out.printf("%s is bad!\n", txt);
		}
	}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

uso de Pattern y Matcher

Publicado por reiky (4 intervenciones) el 11/11/2015 01:08:12
Que tal.

En tu if, cambia el m.find() por m.matches()

if (m.matches()){

. . .

}

y listo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar