2011-06-14 19 views
6

estoy tratando este código, pero me sale este error (.): No ending delimiter '/' foundreemplazar la coma (,) con Dot php RegEx

$form = " 2000,50"; 
$salary = preg_replace('/',', '.'/', $form); // No ending delimiter '/' found 
echo $salary; 

No estoy seguro acerca de la validación de expresiones regulares.

+4

¿Por qué necesita una expresión regular para esto? – BoltClock

Respuesta

52

Regex es excesivo para reemplazar un solo carácter. ¿Por qué no solo hacer esto en su lugar?

str_replace(',', '.', $form); 
+2

De hecho. ¿Por qué usar un taladro eléctrico con 12 mil accesorios cuando un destornillador es suficiente? –

+1

@Midas: parece ser una tendencia para que las respuestas básicas reciban cantidades desproporcionadas de votos favorables en SO. http://stackoverflow.com/questions/4080265/what-does-this-css-do/4080268#4080268 y la mayoría de mis respuestas principales son ejemplos. – BoltClock

+0

En este caso, str_replace() funciona un poco más de 4 veces más rápido que preg_replace(), por lo que str_replace() es claramente la mejor opción. –

3

Usted puede simplemente utilizar

str_replace(',','.',$form); 
5
$salary = preg_replace('/,/', '.', $form); 

Pero sí, que realmente no quieren coincidir con un patrón pero una cadena que es constante, por lo que sólo tiene que utilizar str_replace().

0

El '/' de la cadena se utiliza como un delimitador de inicio de la expresión regular, por lo que debe escaparse. La línea correcta debería decir:

$salary = preg_replace('\\/',', '.'/', $form); 

También me interesa saber por qué el segundo parámetro es ','. '/' más bien que ', /'.

EDITAR

Ahh que veo ahora, la línea debe decir:

$salary = preg_replace('/,/', '.', $form); 

yo estaba confundido porque la primera coma en su ejemplo debe ser un '' para concaturar la cuerda.

1

No entiendo sus parámetros: no estoy seguro de qué se supone que debe estar en la cadena y qué no. Pero para preg_replace, el patrón de búsqueda debe ser una cadena, y con la cadena también comienza y termina con un delimitador (típicamente '/'). Creo que es redundante tener barras alrededor de la cadena de búsqueda cuando ya está dentro de una cadena, pero así es como funciona.

El segundo parámetro debe ser una cadena que contenga el punto y nada más. Esto da:

$ salario = preg_replace ('/, /', '.', $ Form);

Otras personas tienen la certeza de que str_replace estará bien para convertir un carácter en otro, pero si el reemplazo que desea se vuelve más complicado, preg_replace será razonable.

Cuestiones relacionadas