【发布时间】:2011-09-29 12:06:21
【问题描述】:
我不仅要识别字符串中的“数字”,还要标记它是什么类型的数字,例如 General、Fraction、Percentile、Ratio 等。
现在,如果我使用像 http://rubular.com/ 这样的工具,我的模式似乎可以正常工作。
规则?
([-+]?)([0-9]+)([,+]?)([.]?) //General
([-+]?[0-9.,]+[%]) //Percent
([0-9]+[\/][0-9]+(?:st|nd|rd|th)) //Fraction
([-+]?[0-9.,]+[:][-+]?[0-9.,]+) //Ratio
要检查的字符串?
1
1,000
1.000
-50.5
-1:+3
1,200.6:3.9
+2:-4
1/5th
25%
25.76%
1,001%
当我将它们放入 php (if/elseif) 构造时,我总是以“一般”数字结束?
if (preg_match('/([-+]?[0-9.,]+[%])/',$string)) {
echo " PERCENTILE ";
} elseif (preg_match('/([0-9]+[\/][0-9]+(?:st|nd|rd|th))/',$string)) {
echo " FRACTION ";
} elseif (preg_match('/([-+]?[0-9.,]+[:][-+]?[0-9.,]+)/',$string)) {
echo " RATIO ";
} elseif (preg_match('/([-+]?)([0-9]+)([,+]?)([.]?)/',$string)) {
echo " CARDINAL ";
} else {
echo " GENERAL ";
}
无论如何,它都在呼应“红衣主教”。
是的,我尝试过切换顺序(首先是卡/一般,然后是其他)。 是的,我尝试让它们独立 IF(),并以相反的顺序(最一般的优先)。
似乎没有任何效果。 即使是对任何格式的 Single IF 检查也会失败。 要么我的规则被塞满了——要么我做错了什么。
【问题讨论】:
-
对我来说很好:codepad.viper-7.com/UU7Tw4
-
谢谢。它是现有代码的一部分......所以其他地方正在导致问题(不知道如何/为什么)。
-
好吧......我想我可能已经找到了我的问题......“字符串”的值不是我的脚本中应该有的值(它将它分解为一个初始整数) . -- 就是说……如果没有你们的帮助,我永远也想不通,所以非常感谢你们!
-
更新:谢谢大家 - 我得到了它的工作。非常感谢,他们现在都有 ^$ 并再次进行了测试。
标签: php regex numbers preg-match