Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要根据当前情况为给定输入的preg_match()创建模式。。。PHP_Php_Regex - Fatal编程技术网

需要根据当前情况为给定输入的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厘米
案例2- $decimalSeparator=','; $千分位符='

容许个案-

  • 45.789,78
  • 45.789,78厘米
  • 789,45
  • 1.789厘米
  • 789
不获批准的个案-

  • 45789.45
  • 45789.45厘米
  • 789厘米
  • 789.45厘米
  • 1789厘米
  • 789756.45
  • 78,78,78厘米
注-‘cm’是厘米,它是可变的,可以是英寸、毫米、公里等。单位可以存在或不存在,但如果存在,则需要处理。现在我随机放置了单位,请不要考虑单位,因为它是精确的方式


谢谢。

您可以这样构建您的模式:

$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
的最后一个参数。