パーサーの寛大さを設定する

# IntlDateFormatter::setLenient

# datefmt_set_lenient

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

IntlDateFormatter::setLenient -- datefmt_set_lenient — パーサーの寛大さを設定する

### 説明

オブジェクト指向型

public function IntlDateFormatter::setLenient(bool `$lenient`): void

手続き型

function datefmt_set_lenient(IntlDateFormatter `$formatter`, bool `$lenient`): void

パターンに正確にマッチしていない入力の処理を、 パーサーが厳格に行うのか寛大に行うのかを定義します。 寛大なパースを有効にすると、日付や時刻のパターンに不備がある場合でも 可能な限り値を取得しようと試みます。余計な空白があったり 理解不能なトークンがあったり、あるいは値が無効な場合 ("Feburary 30th") は処理できません。

### パラメータ

`formatter`

  Formatter リソース。

`lenient`

  パーサーを寛大なものにするかどうか。デフォルトは `true` (寛大) です。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### 例

例1 datefmt_set_lenient() の例

    <?php
    $fmt = datefmt_create(
        'en_US',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        'America/Los_Angeles',
        IntlDateFormatter::GREGORIAN,
        'dd/MM/yyyy'
    );
    echo 'lenient of the formatter is : ';
    if ($fmt->isLenient()) {
        echo 'TRUE';
    } else {
        echo 'FALSE';
    }
    datefmt_parse($fmt, '35/13/1971');
    echo "\n Trying to do parse('35/13/1971').\nResult is : " . datefmt_parse($fmt, '35/13/1971');
    if (intl_get_error_code() != 0) {
        echo "\nError_msg is : " . intl_get_error_message();
        echo "\nError_code is : " . intl_get_error_code();
    }
    datefmt_set_lenient($fmt, false);
    echo "\nNow lenient of the formatter is : ";
    if ($fmt->isLenient()) {
        echo 'TRUE';
    } else {
        echo 'FALSE';
    }
    datefmt_parse($fmt, '35/13/1971');
    echo "\nTrying to do parse('35/13/1971').\nResult is : " . datefmt_parse($fmt, '35/13/1971');
    if (intl_get_error_code() != 0) {
        echo "\nError_msg is : ".intl_get_error_message();
        echo "\nError_code is : ".intl_get_error_code();
    }

    ?>

例2 オブジェクト指向の例

    <?php
    $fmt = new IntlDateFormatter(
        'en_US',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        'America/Los_Angeles',
        IntlDateFormatter::GREGORIAN,
        'dd/MM/yyyy'
    );
    echo 'lenient of the formatter is : ';
    if ($fmt->isLenient()) {
        echo 'TRUE';
    } else {
        echo 'FALSE';
    }
    $fmt->parse('35/13/1971');
    echo "\n Trying to do parse('35/13/1971').\nResult is : " . $fmt->parse('35/13/1971');
    if (intl_get_error_code() != 0) {
        echo "\nError_msg is : " . intl_get_error_message();
        echo "\nError_code is : " . intl_get_error_code();
    }

    $fmt->setLenient(FALSE);
    echo "\nNow lenient of the formatter is : ";
    if ($fmt->isLenient()) {
        echo 'TRUE';
    } else {
        echo 'FALSE';
    }
    $fmt->parse('35/13/1971');
    echo "\n Trying to do parse('35/13/1971').\nResult is : " . $fmt->parse('35/13/1971');
    if (intl_get_error_code() != 0) {
        echo "\nError_msg is : " . intl_get_error_message();
        echo "\nError_code is : " . intl_get_error_code();
    }

    ?>

上の例の出力は以下となります。

    lenient of the formatter is : TRUE
    Trying to do parse('35/13/1971').
    Result is : 66038400
    Now lenient of the formatter is : FALSE
    Trying to do parse('35/13/1971').
    Result is :
    Error_msg is : Date parsing failed: U_PARSE_ERROR
    Error_code is : 9

### 参考

- datefmt_is_lenient() - IntlDateFormatter で使用する寛大さを取得する
- datefmt_create() - Date Formatter を作成する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open