如果字符串不是数字
,我目前要进行以下检查if (!ctype_digit($matching)) {
}
然而现在我想改变它,以便我想检测以下格式:
xxxk
xxxrb
xxx.xxxx
或任何数字
检测此问题的最佳正则表达式是什么?这里的X是0-9之间的整数/数字,可以是任意长度。例如,这是一个有效的匹配:
8k
72k
123k
899rb
20rb
5rb
160.000
1.600.218
答案 0 :(得分:0)
根据您想要匹配的字符串,这里是正则表达式:
/^\d[0-9a-z\.]+$/i
Working example(请注意,我添加了g
和m
参数,以便与每个示例相匹配)
如果您需要确保所有小数点后面都有3位数,那么它会变得更复杂一些:
/^\d{1,3}(?:\.\d{3}?)*(?:[a-z]+)?$/i
<强>更新强>
现在根据所有新例子工作。
答案 1 :(得分:0)
请允许我根据我对您的格式的理解提供通用解决方案。
在正则表达式中,您可以根据您的多种格式使用|
含义左右,可以使用或者像这样表达:
x{3}k|x{3}rb|x{3}\.x{4}|\d+
每个|
(或)代表您可能允许/评估的格式(表达式)之一。
由于您的帖子中未指定x
,请注意x
可以轻松替换为[a-zA-Z]
表达式的字母或带有[0-9]
表达式的数字或两者的组合比如[a-zA-Z0-9]
。
答案 2 :(得分:0)
您可以使用此正则表达式:
^\d{1,3}(?:k|rb|(?:\.\d{3})+|\d+)$
<强> Working demo 强>
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)?