php正则表达式的价格

时间:2015-03-04 09:21:23

标签: php regex

我不是最好的正则表达式,所以我希望有人能够帮助我。

我需要使用以下方式处理preg_match和preg_replace的语法。

  • 30,50 = true
  • 30 = true
  • 300,50 = true
  • 456,50 = true
  • 4.567,50 = true

  • 30,10 = false
  • 300,45 = false
  • 456,75 = false

简而言之,它接受任何整数并且也接受,如果它是浮点数,则接受50,但如果浮点数在01到49之间,则返回false,01到,99到99

是否可以制作一个正则表达式,用4500,50代替4.500,50的浮点数?并同时用3521?

替换像3.521这样的整数

我一直在阅读很多关于制作正则表达式的教程,但是我还没能制作出能够解决问题的正则表达式。

我知道我在这里问了很多,但我真的希望有人可以帮助我。

你发布答案的最后一件事我可以让你在答案之下将其分解并解释它的作用以及为什么我能够很好地理解它?

2 个答案:

答案 0 :(得分:1)

  

我需要使用以下方式处理preg_match和preg_replace的语法。

你走了:

(^\d+(\.?\d+)?($|(,50$)))

请注意,只有当您的搜索字符串中只包含类似价格的数据时,才会有效。

首先,可能找到的模式必须从字符串的最开头(^字符)开始。 然后,您要查找至少一个(或更多)数字。 \ d类带+号。这个模式可以跟随(但不一定是!(? - key))一个点,后面必须跟一个或多个数字。 最后但并非最不重要(哈哈!)你的搜索字符串必须现在结束($ key)或者必须跟随你的",50"模式然后结束。

这与您向我们提供示例的方式匹配或失败。

请注意,在Brackets中编写的所有内容都是子模式,因此会获得子匹配。这对你的preg_replace问题很重要。我没有检查这个问题,但我猜你能够弄清楚自己(或再问一次)),但这是一个快速的镜头:

匹配:

((\d+)\.(\d+(\,?\d+)?))

用类似的东西代替:

$0 --> $2$3

但这确实是不可测试的!

请告诉我是否遗漏了任何麻烦;)

编辑:修复了用于PHP样式替换的preg_replace的模式!

答案 1 :(得分:0)

//match string 
//if the string contains only the digits from 0 to 9 or the . character
//or (here | means or)
//if the string contains digits followed by ",5" and then followed by more digits
$PATTERN = '/^[.0-9]+$|(\d),5(\d)+/';

//true
$PRICE1 = '30,50';
$PRICE2 = '30';
$PRICE3 = '300,50';
$PRICE4 = '4.567,50';
$PRICE5 = '3.560';

//false
$PRICE6 = '30,10';
$PRICE7 = '300,45';
$PRICE8 = '456,75';

echo preg_match($PATTERN, $PRICE1); //returns 1                                     
echo preg_match($PATTERN, $PRICE2); //returns 1
echo preg_match($PATTERN, $PRICE3); //returns 1                                     
echo preg_match($PATTERN, $PRICE4); //returns 1
echo preg_match($PATTERN, $PRICE5); //returns 1

echo preg_match($PATTERN, $PRICE6); //returns 0                                     
echo preg_match($PATTERN, $PRICE7); //returns 0
echo preg_match($PATTERN, $PRICE8); //returns 0