| // +---------------------------------------------------------------------- | |
| // | ThinkPHP [ WE CAN DO IT JUST THINK ] | |
| // +---------------------------------------------------------------------- | |
| // | Copyright (c) 2006~2015 http://thinkphp.cn All rights reserved. | |
| // +---------------------------------------------------------------------- | |
| // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) | |
| // +---------------------------------------------------------------------- | |
| // | Author: yunwuxin <448901948@qq.com> | |
| // +---------------------------------------------------------------------- | |
| namespace think\console\output\question; | |
| use think\console\output\Question; | |
| class Confirmation extends Question | |
| { | |
| private $trueAnswerRegex; | |
| /** | |
| * 构造方法 | |
| * @param string $question 问题 | |
| * @param bool $default 默认答案 | |
| * @param string $trueAnswerRegex 验证正则 | |
| */ | |
| public function __construct($question, $default = true, $trueAnswerRegex = '/^y/i') | |
| { | |
| parent::__construct($question, (bool) $default); | |
| $this->trueAnswerRegex = $trueAnswerRegex; | |
| $this->setNormalizer($this->getDefaultNormalizer()); | |
| } | |
| /** | |
| * 获取默认的答案回调 | |
| * @return callable | |
| */ | |
| private function getDefaultNormalizer() | |
| { | |
| $default = $this->getDefault(); | |
| $regex = $this->trueAnswerRegex; | |
| return function ($answer) use ($default, $regex) { | |
| if (is_bool($answer)) { | |
| return $answer; | |
| } | |
| $answerIsTrue = (bool) preg_match($regex, $answer); | |
| if (false === $default) { | |
| return $answer && $answerIsTrue; | |
| } | |
| return !$answer || $answerIsTrue; | |
| }; | |
| } | |
| } | |