Foros del Web » Programando para Internet » ASP Clásico »

[SOLUCIONADO] Filtrar contenido String

Estas en el tema de Filtrar contenido String en el foro de ASP Clásico en Foros del Web. Buenas tardes, Tengo un foro en el cual hay usuarios que en el mensaje además de exponer sus preguntas y respuestas también ponen números de ...
  #1 (permalink)  
Antiguo 21/05/2014, 08:22
 
Fecha de Ingreso: septiembre-2011
Mensajes: 116
Antigüedad: 12 años, 7 meses
Puntos: 8
Filtrar contenido String

Buenas tardes,

Tengo un foro en el cual hay usuarios que en el mensaje además de exponer sus preguntas y respuestas también ponen números de teléfono.

¿Cómo puedo hacer un tratamiento de estas cadenas para detectar cual contiene un teléfono (fijo o móvil) y remplazarla por un texto que yo elija?

Actualmente utilizo una función para filtrar URLs, que ahora tengo que adaptar para números de teléfono.

Código:
	Function filtra_string(byval str)
		Dim comienzo, strurl
		
		Do while (instr(str,"http://")>0) or (instr(str,"www.")>0)  
			strurl = ""
			'Calculamos la pos. del comienzo de la URL
			comienzo = instr(str,"http://")
			if comienzo = 0 then
				comienzo = instr(str,"www.")
			End if													
			 
			'Construimos la URL detectada
			Do while (mid(str, comienzo, 1) <> " ") and (comienzo <> len(str) + 1)
				strurl = strurl + mid(str, comienzo, 1)
				comienzo = comienzo + 1
			Loop 
			'y la reemplazamos en la cadena original
			str = replace(str,strurl,"[contenido bloqueado]")
			'vamos a por la siguiente en caso que exista
		Loop
		 
		filtra_string = str
	 
	End Function
Tengo que tener en cuenta que los números de teléfono los pueden haber insertado en los siguientes formatos dentro de la cadena:
  • 6XXXXXXXX
  • 6XX.XXX.XXX
  • 6XX XXX XXX
  • 6XX XX XX XX
  • 93 XXX XX XX
  • 93XXXXXXX
  • 93X XXX XXX
  • 93X.XXX.XXX

Dado que la casuistica es variable no acabo de dar con la formula para acabar de contemplar dichos casos.


Quisiera que quedar de la siguiente manera:

Texto original:

Cita:
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 666 666 666. Gracias a todos
Texto tratado:

Cita:
Hola, me llamo Fuckencio y me gusta mucho. Llamame al [contenido bloqueado]. Gracias a todos
Gracias en adelante.

Un saludo

Última edición por gdasoft; 21/05/2014 a las 08:41
  #2 (permalink)  
Antiguo 22/05/2014, 01:21
 
Fecha de Ingreso: enero-2008
Ubicación: Málaga - España
Mensajes: 346
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Filtrar contenido String

Díficil si no hay uno o varios patrónes definidos. Al final la gente encuentra la forma.

Hola, me llamo Fuckencio y me gusta mucho. Llamame al 6 66 666 666. Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 66 6 666 666. Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 6 6 6 6 6 6 6 6 6. Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al SEIS66 666 666. Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 6SEIS6 6SEIS6 666. Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 6-6-6-6-6-6-6-6-6 Gracias a todos
Hola, me llamo Fuckencio y me gusta mucho. Llamame al 66b 6b6 66b. Gracias a todos

Y así hasta el infinito.... es muy complicado de controlar. Si siempre hay un patron, sería sencillo, pero al final los usuarios encuentran su forma de poner el telefono :D
  #3 (permalink)  
Antiguo 22/05/2014, 03:34
 
Fecha de Ingreso: septiembre-2011
Mensajes: 116
Antigüedad: 12 años, 7 meses
Puntos: 8
Respuesta: Filtrar contenido String

Hola alpe2000,

Tienes toda la razón, pero los usuarios que tenemos no van a realizar combinaciones como por ejemplo SEIS66 666 666. De bien seguro que solo pondrán números, el handicap es sí tendrán o no espacios o puntos entre ellos.

Se me ocurre que quizás podría tratar la cadena de la siguiente manera:
1) Substituir los puntos (.) por espacios con replace()
2) Eliminar todos los espacios de la cadena con un trim()
3) Buscar en la cadena si existe un numero que este entre 600000000 y 999999999 y remplazar por [contenido bloqueado]

Mi duda ahora sería como realizar el paso 3.


Gracias por tu ayuda, un saludo
  #4 (permalink)  
Antiguo 22/05/2014, 10:33
 
Fecha de Ingreso: septiembre-2011
Mensajes: 116
Antigüedad: 12 años, 7 meses
Puntos: 8
Respuesta: Filtrar contenido String

Finalmente he resulto mi problema con una expresión regular. Por si alguien la necesita adjunto el código a continuación:

Código:
	Function filtra_string(byval str)

		Dim comienzo, strurl, colMatch,objMatch
		Set regEx = New RegExp
		regEx.Pattern = "((\+?34([ \t|\-|\.])?)?[9|6|7]((([ \t|\-|\.])?[0-9]{2}))([ \t|\-|\.])?[0-9]{2,3}([ \t|\-|\.])?[0-9]{2,3}([ \t|\-|\.])?[0-9]{0,3})"
    	regEx.Global = true
		set colMatch = regEx.execute (str)
		
		For each objMatch  in colMatch
			str = replace(str,objMatch.value,"[contenido bloqueado]")
		Next
		
		filtra_string = str
	 
	End Function
Con esta expresión puedo remplazar los teléfonos que empiezan con 34, 9, 7 y 6 y que están escritos en los siguientes formatos:
  • XXXXXXXXX
  • XXX.XXX.XXX
  • XXX XXX XXX
  • XXX.XX.XX.XX
  • XXX XX XX XX


Damos el tema como solucionado. Un saludo

Etiquetas: contenido, filtrar, string
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 23:31.