Convierta ereg_replace en preg_replace en el código fuente de USAePay

Estoy usando la biblioteca PHP [horrible] de USAePay para conectarme a su puerta de enlace, pero recibo el siguiente error:

En desuso: la función ereg_replace () está obsoleta en ... / usaepay.php en la línea 320

Corresponde a la siguiente línea:

$this->amount = ereg_replace("[^[:digit:].]", "", $this->amount);

Entonces, me gustaría cambiarlo con preg_replace.
Esto es lo que estoy pensando:

$this->amount = ereg_replace("/[^[\d].]/", "", $this->amount);

¿Es esto equivalente al anterior, o no?

preguntado el 08 de noviembre de 11 a las 19:11

2 Respuestas

Es posible que desee obtener la última versión de la biblioteca usaepay:

https://github.com/usaepay/usaepay-php

que reemplaza la línea en cuestión con:

$this->amount=preg_replace("/[^0-9\.]/","",$this->amount);

respondido 09 nov., 11:11

'/[^\d.]/' es mejor (no es necesario escapar del punto dentro de una clase de carácter) - ThiefMaster

¿Alguna razón en particular por la que te gusta \ d más que 0-9? no hay diferencia de velocidad y creo que 0-9 es un poco más obvio. si realmente quieres ir por la ruta \ d, ¿por qué no hacer \ D en lugar de ^ \ d? Además, creo que usar un \. todo el patrón (incluidos los corchetes interiores) es una buena idea. es menos probable que olvide por error la barra cuando está fuera de los corchetes, lo que podría provocar una coincidencia de patrones inesperada ... - nadapollo

Personalmente prefiero 0-9 cuando necesito una clase de personaje de todos modos, pero \d sigue siendo "más limpio" en mi opinión. \D no funcionará debido a la . también quieres permitir. - ThiefMaster

+1 De hecho, presenté un error en esto y me redirigieron a su repositorio de GitHub ... - MegaHit

Sí, es realmente frustrante que no tengan la versión más reciente vinculada en su biblioteca de desarrolladores, eso me habría ahorrado algo de tiempo. Zach Lysobey

Desea eliminar cualquier carácter que no sea un dígito o un punto de la cadena que representa una cantidad. Tu puedes hacer:

$this->amount = preg_replace("/[^\d.]/", "", $this->amount);

Regex utilizado:

[   - Start of character class
 ^  - Negation
 \d - any digit
 .  - a literal perios
]   - end of character class

respondido 08 nov., 11:23

Is [:digit:] in ereg equivalente a simplemente \d in preg? - MegaHit

En realidad, PCRE también admite la clase de caracteres [: digit:] (consulte este link). Y sí, ambos significan lo mismo: Exander

Debe utilizar comillas simples para las cadenas de expresiones regulares. De lo contrario, podría usar accidentalmente alguna secuencia de escape en lugar de un raw \something. - ThiefMaster

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.