在USAePay源代码中将ereg_replace转换为preg_replace

3
我正在使用USAePay的[糟糕的]PHP库连接到他们的网关,但是我遇到了以下错误:

已弃用:函数ereg_replace()已弃用,位于.../usaepay.php的第320行

这对应于以下行:
$this->amount = ereg_replace("[^[:digit:].]", "", $this->amount);

所以,我想用preg_replace来替换它。
这是我想的:

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

这与上面那个是否等价?

2个回答

4
你可能想要获取最新版本的usaepay库: https://github.com/usaepay/usaepay-php
该版本将替换有问题的那行代码。
$this->amount=preg_replace("/[^0-9\.]/","",$this->amount);

'/[^\d.]/' 更好(字符类内部的点无需转义) - ThiefMaster
你为什么喜欢\d而不是0-9呢?速度上并没有区别,我认为0-9更加明显。如果你真的想用\d,为什么不使用\D代替^\d呢?此外,我认为在整个模式中(包括括号内)使用.是一个好主意。这样在你在括号外时不会错误地忘记斜杠,从而导致意外的模式匹配... - nadachicken
个人而言,当我需要一个字符类时,我更喜欢使用 0-9 - 但在我看来,\d 更加“简洁”。由于你还想允许 .,所以 \D 不起作用。 - ThiefMaster
+1 我实际上在这个问题上提交了一个错误报告,他们将我重定向到了他们的GitHub存储库... - MegaHit
是的,他们在开发者库中没有链接到最新版本真的很令人沮丧 - 这会浪费我一些时间。 - Zach Lysobey

3
您想从表示金额的字符串中删除任何非数字或非句点字符。您可以这样做:
$this->amount = preg_replace("/[^\d.]/", "", $this->amount);

使用的正则表达式:

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

ereg 中,[:digit:] 是否等价于 preg 中的 \d - MegaHit
实际上,PCRE也支持[:digit:]字符类(请参见此链接)。是的,它们都表示相同的意思。 - Exander
你应该在正则表达式字符串中使用单引号。否则,你可能会意外地使用一些转义序列,而不是原始的 \something - ThiefMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接