как исправить preg_match () неизвестный модификатор '?' в localeconv () - PullRequest
1 голос
/ 28 апреля 2019

проблема с 'decimal_point' => string '/'

но у кого-нибудь было хорошее решение, чтобы это исправить?

ошибка :

  preg_match() unknown modifier '?'

функция:

     * @param   string  $str    input string
     * @return  boolean
     */
    public static function numeric($str)
    {
        // Get the decimal point for the current locale
        list($decimal) = array_values(localeconv());

        // A lookahead is used to make sure the string contains at least one digit (before or after the decimal point)

         return (bool) preg_match('/^-?+(?=.*[0-9])[09]*+'.preg_quote($decimal).'?+[0-9]*+$/D', (string) $str); 
}

это дамп localeconv ():

array (size=18)
  'decimal_point' => string '/' (length=1)
  'thousands_sep' => string ',' (length=1)
  'int_curr_symbol' => string 'IRR' (length=3)
  'currency_symbol' => string 'ريال' (length=8)
  'mon_decimal_point' => string '/' (length=1)
  'mon_thousands_sep' => string ',' (length=1)
  'positive_sign' => string '' (length=0)
  'negative_sign' => string '-' (length=1)
  'int_frac_digits' => int 2
  'frac_digits' => int 2
  'p_cs_precedes' => int 0
  'p_sep_by_space' => int 0
  'n_cs_precedes' => int 0
  'n_sep_by_space' => int 0
  'p_sign_posn' => int 3
  'n_sign_posn' => int 3
  'grouping' => 
    array (size=1)
      0 => int 3
  'mon_grouping' => 
    array (size=1)
      0 => int 3

соответствующий вопрос на github Косевен / выпуски # 351

1 Ответ

0 голосов
/ 29 апреля 2019

Поскольку вы используете / в качестве разделителя в регулярном выражении, передайте его функции preg_quote, а также второму параметру:

return (bool) preg_match('/^-?+(?=.*[0-9])[09]*+' . preg_quote($decimal, '/') . '?+[0-9]*+$/D', (string) $str);
// -----------------------------------------------------------------------^

Цитата из руководства:

Обратите внимание, что / не является специальным символом регулярного выражения.

[...]

Разделитель
Если указан дополнительный разделитель, он также будет экранирован. Это полезно для экранирования, который требуется с помощью функций PCRE. / Является наиболее часто используемым разделителем.

...