正则表达式检测整数后跟一些字符串格式

时间:2014-09-02 02:46:10

标签: php regex

如果字符串不是数字

,我目前要进行以下检查
if (!ctype_digit($matching)) {

}

然而现在我想改变它,以便我想检测以下格式:

xxxk
xxxrb
xxx.xxxx

或任何数字

检测此问题的最佳正则表达式是什么?这里的X是0-9之间的整数/数字,可以是任意长度。例如,这是一个有效的匹配:

8k
72k
123k
899rb
20rb
5rb
160.000
1.600.218

6 个答案:

答案 0 :(得分:0)

根据您想要匹配的字符串,这里是正则表达式:

/^\d[0-9a-z\.]+$/i

Working example(请注意,我添加了gm参数,以便与每个示例相匹配)

如果您需要确保所有小数点后面都有3位数,那么它会变得更复杂一些:

/^\d{1,3}(?:\.\d{3}?)*(?:[a-z]+)?$/i

More complex example

<强>更新

现在根据所有新例子工作。

答案 1 :(得分:0)

请允许我根据我对您的格式的理解提供通用解决方案。

在正则表达式中,您可以根据您的多种格式使用|含义左右,可以使用或者像这样表达:

x{3}k|x{3}rb|x{3}\.x{4}|\d+

Online Demo

每个|(或)代表您可能允许/评估的格式(表达式)之一。

由于您的帖子中未指定x,请注意x可以轻松替换为[a-zA-Z]表达式的字母或带有[0-9]表达式的数字或两者的组合比如[a-zA-Z0-9]

答案 2 :(得分:0)

您可以使用此正则表达式:

^\d{1,3}(?:k|rb|(?:\.\d{3})+|\d+)$

Regular expression visualization

<强> Working demo

enter image description here

php代码是:

$re = "/^\\d{1,3}(?:k|rb|(?:\\.\\d{3})+|\\d+)$/m"; 
$str = "8k\n72k\n123k\n899rb\n20rb\n5rb\n160.000\n1.600.218"; 

preg_match_all($re, $str, $matches);

答案 3 :(得分:0)

你可以用这个:

\A\d+(?:(?:\.\d{3})*|k|rb)\z

答案 4 :(得分:0)

<?php

$matching = "120.000";
$re = "/^(\b\d{1,3}|k|rb|\.\d{3}\b)*$/";

if (!ctype_digit($matching)) {
    if (!preg_match($re, $matching, $matches)) {
        echo "ctype_digit/regex not matched";
    } else {
        echo "regex pattern matched";
    }
} else {
    echo "ctype_digit matched";
}

?>

答案 5 :(得分:0)

另一种解决方案:

\d[.\d]*(?:rb|k)?