Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] preg_replace detectar la coma sin espacios

Estas en el tema de preg_replace detectar la coma sin espacios en el foro de PHP en Foros del Web. Hola, a ver si me podéis echar un cable. Estoy intentado hacer un script que detecte si alguien escribe las comas sin espacios EJ: esto ...
  #1 (permalink)  
Antiguo 08/02/2013, 04:19
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
preg_replace detectar la coma sin espacios

Hola, a ver si me podéis echar un cable.

Estoy intentado hacer un script que detecte si alguien escribe las comas sin espacios EJ: esto en casa,pero no me gusta.

Lo correcto (mecanográficamente hablado) sería esto en casa, pero no me gusta., es decir separar la coma del siguiente caracter.

Lo estoy intentado hacer con preg_replace:

$patrones = array();
$patrones[0] = '/,[a-z]/';

$sustituciones = array();
$sustituciones[0] = ', ';

$texto=preg_replace($patrones, $sustituciones, $texto);

El problema es que aplicado al ejemplo anterior queda:
esto en casa, ero no me gusta.


es decir se come el caracter siguiente al sustituirlo

¿como puedo decrile a preg_replace que sustituya ,[a-z] por , [y lo que estaba]?

Gracias
  #2 (permalink)  
Antiguo 08/02/2013, 05:43
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: preg_replace detectar la coma sin espacios

Me auto respondo por si alguien le interesa:

$patrones = array();
$patrones[0] = '#\,([a-z0-9\-_]*?)#is'; // coma sin espacio

$sustituciones = array();
$sustituciones[0] = ", \\1";

$texto=preg_replace($patrones, $sustituciones, $texto);
  #3 (permalink)  
Antiguo 08/02/2013, 05:51
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: preg_replace detectar la coma sin espacios

Al igual voy mal, pero creo que con un if y un strcmp() tienes para comprobar si hay un espacios o no después de la coma, y luego según que comparaste puedes ponerle espacios o no.
  #4 (permalink)  
Antiguo 08/02/2013, 06:49
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: preg_replace detectar la coma sin espacios

De la forma que he puesto funciona.


Mi duda ahora es otra herramienta similar, que es destectar si despues de un punto hay mayusculas

$text=preg_replace('#\.([a-z])#is','. \\1', $text);

¿como puedo pasar la variable \\1 de la expresión regular a mayusculas?

con .strtolower('\\1') no me funciona


¿alguna idea?

¡¡gracias!! :D
  #5 (permalink)  
Antiguo 08/02/2013, 08:44
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: preg_replace detectar la coma sin espacios

Puedes usar la función preg_replace_callback, se puede hacer con preg_replace con el modificador e, pero no es recomendado y va a ser eliminado en PHP 5.5.0.

algo así muy básico, para que lo mejores:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $str = '.andrés';
  4. echo preg_replace_callback('!\.([a-z])!', 'mifuncion', $str);
  5.  
  6. function mifuncion($matches) {
  7.   return '.' . ucwords($matches[1]);
  8. }
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 08/02/2013, 09:27
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: preg_replace detectar la coma sin espacios

mmmm

no me hace nada esa función, sigue devolviendo .andrés


Estoy echando un vistazo al manual pero no me aclaro
  #7 (permalink)  
Antiguo 08/02/2013, 09:36
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: preg_replace detectar la coma sin espacios

Ya lo tengo

Código PHP:
  $línea 'Como. destastu';
    
$línea preg_replace_callback(
        
'#\. ([a-z])#is',
        
create_function(
            
'$coincidencias',
            
'return strtoupper($coincidencias[0]);'
        
),
        
$línea
    
);
    echo 
$línea

Etiquetas: coma, espacios
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 10:45.