如何解决€25.99 vs 25,99€preg_match问题?

bra*_*erk 6 php regex euro

如果我有这些字符串:

$string1 = "This book costs €25.99 in our shop."
Run Code Online (Sandbox Code Playgroud)

而在另一边

$string2 = "This book costs 25,99€ in our shop."
Run Code Online (Sandbox Code Playgroud)

如何使用preg_match获得"€25.99"或"25,99€" ?代码将如何?

请注意,有两种写欧元符号的方法.欧盟的正确方法是在数字后写下符号,如25,99€,并使用逗号作为desimal分隔符.然而,很多美国人坚持美元方式(25.99欧元)和点作为desimal分离器.

如何检查这两种情况并以最干净,最有效的方式获得带符号的值?

age*_*t-j 3

这是原始的正则表达式: \xe2\x82\xac\\d+(?:[,.]\\d+)?|\\d+(?:[,.]\\d+)?\xe2\x82\xac

\n\n
preg_match ( "/\xe2\x82\xac\\d+(?:[,.]\\d+)?|\\d+(?:[,.]\\d+)?\xe2\x82\xac/" , $string1, $matches)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想考虑欧元和值之间的可选空格,请使用:

\n\n
preg_match ( "/\xe2\x82\xac ?\\d+(?:[,.]\\d+)?|\\d+(?:[,.]\\d+)? ?\xe2\x82\xac/" , $string1, $matches)\n
Run Code Online (Sandbox Code Playgroud)\n