需要根据当前情况为给定输入的preg_match()创建模式。。。PHP
如果存在十进制分隔符(点(.)或逗号(,)和千位分隔符(逗号(,)或点(.)),则传入值应按模式处理。 我现在的代码是需要根据当前情况为给定输入的preg_match()创建模式。。。PHP,php,regex,Php,Regex,如果存在十进制分隔符(点(.)或逗号(,)和千位分隔符(逗号(,)或点(.)),则传入值应按模式处理。 我现在的代码是 if (!preg_match('/^((?:(?:\-?[\d' . $thousandSeparator . ']+(?:' . $decimalSeparator . '\d+)?)|\s*))\s*(.*)$/', $value, $matches)) { throw_error; } 案例1- $decimalSeparator='; $1000andsep
if (!preg_match('/^((?:(?:\-?[\d' . $thousandSeparator . ']+(?:' . $decimalSeparator . '\d+)?)|\s*))\s*(.*)$/', $value, $matches))
{
throw_error;
}
案例1-
$decimalSeparator=';
$1000andseparator=','
容许个案-
- 45789.45
- 45789.45厘米
- 789厘米
- 789.45厘米
- 1789厘米
- 789756.45
- 45.789,78
- 45.789,78厘米
- 78.7.78,78
- 7.8,5
- 7.8厘米
- 45.789,78
- 45.789,78厘米
- 789,45
- 1.789厘米
- 789
- 45789.45
- 45789.45厘米
- 789厘米
- 789.45厘米
- 1789厘米
- 789756.45
- 78,78,78厘米
谢谢。您可以这样构建您的模式:
$units = ['[mck]m', 'inch']; // complete it
$pattern = sprintf('~^-?\d{1,3}(?:[%s]\d{3})*(?:[%s]\d\d)?(?: (?:%s))?$~', $thousandSep, $decimalSep, implode('|', $units));
我不清楚为什么允许使用
789.45厘米
,而不允许使用7.8厘米
(第一种情况)。我喜欢你的图案。很好:)如果我们从输入中删除units部分,你能告诉我模式是什么吗?您的模式也更改为“~^-?\d{1,3}(?:[%s]\d{3})*(?:[%s]\d+)(?:(?:%s))?$~
,因为我想在十进制九月后允许多个数字。@KshitijYelpale:如果您不想要单元部分,您需要删除(?:(?:%s))?
和sprintf
的最后一个参数。