2012-12-01 14:00 - 18:00 のような形式を処理する
500855
def date_parse(datetime_str)
      start_str, end_str = datetime_str.split(' - ')
      date_str = start_str.split(' ')[0]
      end_str = "#{date_str} #{end_str}"
      self.start_datetime = DateTime.parse(start_str + " JST")
      self.end_datetime = DateTime.parse(end_str + " JST")
    end
194225
function onClicksetPresetData(){
$("#onClicksetPresetDataBtn").prop('disabled', true);
    setPresetData().then(()=>{
        alert("書き込み完了");
        $("#onClicksetPresetDataBtn").prop('disabled', false);
        $("#onplayPresetDataBtn").prop('disabled', false);

    }).catch((e)=>{
        alert(e);
        $("#onClicksetPresetDataBtn").prop('disabled', false);
    })
}
570841
function ScrollManager(options) {
                var _this = this;
                this._$root = null; //!< Scroll 対象のルートオブジェクト
                this._$map = null; //!< Scroll Map element を格納
                this._mapHeight = 0; //!< Scroll Map の高さを格納 (_$map の状態に依存させない)
                this._scroller = null; //!< Scroll に使用する IScroller インスタンス
                this._settings = null; //!< ScrollManager オプションを格納
                this._active = true; //!< UI 表示中は true に指定
                this._scrollEventHandler = null; //!< Scroll Event Handler
                this._scrollStopEventHandler = null; //!< Scroll Stop Event Handler
                this._baseHeight = 0; //!< 高さの基準値
                this._lines = []; //!< 管理下にある LineProfile 配列
                this._pages = []; //!< 管理下にある PageProfile 配列
                //! 最新の表示領域情報を格納 (Scroll 中の更新処理に使用)
                this._lastActivePageContext = {
                    index: 0,
                    from: 0,
                    to: 0,
                    pos: 0,
                };
                this._backup = {}; //!< データの backup 領域. key と _lines を格納。派生クラスで拡張可能。
                // ListViewOptions 既定値
                var defOptions = {
                    scrollerFactory: UI.ScrollerElement.getFactory(),
                    enableHiddenPage: false,
                    enableTransformOffset: false,
                    scrollMapRefreshInterval: 200,
                    scrollRefreshDistance: 200,
                    pagePrepareCount: 3,
                    pagePreloadCount: 1,
                    enableAnimation: true,
                    animationDuration: 0,
                    baseDepth: "auto",
                    itemTagName: "li",
                    removeItemWithTransition: true,
                    useDummyInactiveScrollMap: false,
                };
                // 設定格納
                this._settings = $.extend({}, defOptions, options);
                // スクロールイベント
                this._scrollEventHandler = function (event) {
                    _this.onScroll(_this._scroller.getPos());
                };
                // スクロール停止イベント
                this._scrollStopEventHandler = function (event) {
                    _this.onScrollStop(_this._scroller.getPos());
                };
            }
1368969
function showInputCalendar (el, date) {
  var cal = $('#koyomiCalendar');
  if (cal) {
    cal.remove();
  }

  var input = $(el);
  var v = input.val();
  date = date || koyomi.toDate(v) || new Date();

  var html = '<table id="koyomiCalendar">\n';
  var caption = '<a class="prev" href="#">&#x226A;</a>' +
                koyomi.format(date, 'Y年M月') +
                '<a class="next" href="#">&#x226B;</a>';

  html += '<caption>' + caption + '</caption>';
  html += '<tr>' +
          '<th class="sun">日</th>' +
          '<th class="weekday">月</th>' +
          '<th class="weekday">火</th>' +
          '<th class="weekday">水</th>' +
          '<th class="weekday">木</th>' +
          '<th class="weekday">金</th>' +
          '<th class="sat">土</th>' +
          '</tr>';


  var days = koyomi.getCalendarData(date);

  days.forEach(function(day){

    if (day.sow) {
      html += '<tr>';
    }

    var cname = day.ghost      ? 'ghost'       :
                day.holiday    ? 'day holiday' :
                day.week === 0 ? 'day sun'     :
                day.week === 6 ? 'day sat'     :
                'day weekday';

    var title = day.close;

    if (title) {
      html += '<td class="' + cname + '" title="' + title + '">' + day.day + '</td>';
    } else {
      html += '<td class="' + cname + '">' + day.day + '</td>';
    }

    if (day.eow) {
      html += '</tr>\n';
    }
  });

  html += '<tr><th colspan="7" class="close">閉じる</th></tr>\n';
  html += '</table>';

  input.after(html);
  cal = $(input.next()[0]);
  cal.click(function (e) {
    var target = $(e.target);

    // 日付入力
    if (target.hasClass('day')) {
      input.val(date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + target.text());
      cal.remove();

    // 前月
    } else if (target.hasClass('prev')) {
      cal.remove();
      showInputCalendar(el, koyomi.add(date, '-1m'));

    // 来月
    } else if (target.hasClass('next')) {
      cal.remove();
      showInputCalendar(el, koyomi.add(date, '1m'));

    // 閉じる
    } else if (target.hasClass('close')) {
      cal.remove();
    }
  });
}
422843
function refresh($target) {
                var PREFIX = ["-webkit-", ""];
                var valid = function (prop) {
                    return (prop && "none" !== prop);
                };
                var dataUrl;
                for (var i = 0, n = PREFIX.length; i < n; i++) {
                    if (!valid(dataUrl)) {
                        dataUrl = $target.css(PREFIX[i] + "mask-image");
                        if (valid(dataUrl)) {
                            // iOS では url(data***); 内に '"' は入らない
                            var match = dataUrl.match(/(url\(data:image\/svg\+xml;)([\s\S]*)?(base64,[\s\S]*\))/);
                            if (match) {
                                dataUrl = match[1] + "bust=" + Date.now().toString(36) + ";" + match[3];
                            }
                            else {
                                dataUrl = null;
                            }
                        }
                    }
                    if (valid(dataUrl)) {
                        $target.css(PREFIX[i] + "mask-image", dataUrl);
                    }
                }
                return $target;
            }
1272221
function(e){
		if(e.touches!==void 0){
			/* touchイベントだった場合 */
			return (e.touches.length===1 ? 'left' : '');
		}
		else if(!!e.pointerType && e.pointerType!=='mouse'){
			/* pointerイベントだった場合 */
			return (e.isPrimary ? 'left' : '');
		}
		return ['left','middle','right'][(e.button!==void 0 ? e.button : e.which-1)] || '';
	}
163746
function( values, targetHTMLFilePath ){
        var deferred = Q.defer(),
            generatedCode;

        /**
         * テンプレート向けユーティリティ
         * リソースファイルへのパス記述をファイル相対形式で返却する
         * @param {String} resourcePath
         * @return {String}
         */
        function normalizePath( resourcePath ){
            return path.relative(
                path.dirname( path.resolve( process.cwd(), targetHTMLFilePath ) ),
                resourcePath
            ).split( path.sep ).join( "/" );
        }

        var resolvedDefaultValues = {};
        _.forEach( this.defaultValues, function( value, key ){
            resolvedDefaultValues[ key ] = _.template( value )( {
                __normalizePath__: normalizePath
            } );
        } );

        // テンプレート固有の（更新先HTML由来ではない）パラメータを追加
        values = _.assign( values, {
            __default__: resolvedDefaultValues,
            __normalizePath__: normalizePath
        } );

        try {
            generatedCode = this.processor( values );
        } catch( err ){
            deferred.reject( err );
            return deferred.promise;
        }

        deferred.resolve( generatedCode );
        return deferred.promise;
    }
552045
function ClassHelper (name, properties, template) {
  // props
  if (!properties) {
    throw new Error('ヘルパーを作成できません。プロパティの設定が存在しません');
  }
  this.name = name || '';
  this.props = properties;
  // template
  this.tpl = null;
  if (typeof template === 'string') {
    this.tpl = template.split(EOL);
  } else if (Array.isArray(template)) {
    this.tpl = template;
  }
}
258342
function(){
		var lines = this.fstr.split("\n");
		var firstline = lines.shift();
		delete this.fstr;
		
		/* ヘッダからパズルの種類・ファイルの種類を判定する */
		if(firstline.match(/^pzprv3/)){
			this.type = FILE_PZPR;
			if(firstline.match(/pzprv3\.(\d+)/)){ this.filever = +RegExp.$1;}
			this.pid = lines.shift();
			this.qdata = lines.join("\n");
		}
		else if(firstline.match(/^\<\?xml/)){ // jshint ignore:line
			this.type = FILE_PBOX_XML;
			lines.unshift(firstline);
			this.qdata = lines.join("\n");
			if(!!DOMParser){
				this.body = (new DOMParser()).parseFromString(this.qdata, 'text/xml');
				this.pid = this.body.querySelector('puzzle').getAttribute('type');
			}
			else{ this.pid = '';}
		}
		else if(firstline.match(/^\d+$/)){
			this.type = FILE_PBOX;
			lines.unshift(firstline);
			this.qdata = lines.join("\n");
		}
		else{
			this.pid = '';
		}
		this.pid = pzpr.variety.toPID(this.pid);
		
		return (!!this.pid);
	}
437630
function(){
		// とりあえず盤面全部の対応だけ
		var d0 = this.area, d = {x1:d0.x1,y1:d0.y1,x2:d0.x2,y2:d0.y2};
		var key_undo = this.board.exec.boardtype[this.old][0];
		if(key_undo & this.TURN){ var tmp=d.x1;d.x1=d.y1;d.y1=tmp;}
		this.exec(key_undo,d);
	}
553452
function(){
		/* "ものを動かしたように描画する"でなければinputLineと同じ */
		if(this.puzzle.execConfig('dispmove')){
			this.inputMoveLine();
			return;
		}
		
		var pos, border;
		if(!this.board.borderAsLine){
			pos = this.getpos(0);
			if(this.prevPos.equals(pos)){ return;}
			border = this.prevPos.getnb(pos);
		}
		else{
			pos = this.getpos(0.35);
			if(this.prevPos.equals(pos)){ return;}
			border = this.prevPos.getborderobj(pos);
		}
		
		if(!border.isnull){
			if(this.inputData===null){ this.inputData=(border.isLine()?0:1);}
			if     (this.inputData===1){ border.setLine();}
			else if(this.inputData===0){ border.removeLine();}
			border.draw();
		}
		this.prevPos = pos;
	}
127269
function getISOWeekNumber (date) {
  var wn = getWeekNumber(date, 1, 1);
  var d1_1 = new Date(date.getFullYear(), 0, 1);
  var w1_1 = d1_1.getDay();
  // 初週の日数が少ない場合は週番号がひとつ前にずれる
  if (!w1_1 || 4 < w1_1) {
    wn--;
  }
  if (wn === 0) {
    return 53;
  } else if (wn === 53) {
    // 最終週の場合も多いほうの年の週番号とする
    var d12_31 = new Date(date.getFullYear(), 11, 31);
    var w12_31 = d12_31.getDay();
    return w12_31 && w12_31 < 4 ? 1 : wn;
  } else {
    return wn;
  }
}
696812
function setKokuminNoKyujitu(year, holidays) {
  if (year < 1988) {
    return;
  }
  var kokumin = [];
  var last = null;
  Object.keys(holidays).forEach(md => {
    var date = new Date(year, md.slice(0, -2) * 1 - 1, md.slice(-2) * 1);
    if (last){
      last.setTime(last.getTime() + A_DAY);
      if (last.getTime() + A_DAY === date.getTime()) {
        kokumin.push((last.getMonth() + 1) * 100 + last.getDate());
      }
    }
    last = date;
  });
  // 他の祝日や振替休日が優先される
  kokumin.forEach(x => holidays[x] = holidays[x] || '国民の休日');
}
415941
function(){
		/* ヘッダの処理 */
		if(this.type===FILE_PZPR){
			return [(this.filever===0?"pzprv3":("pzprv3." + this.filever)), this.pid, ""].join("\n");
		}
		else if(this.type===FILE_PBOX_XML){
			this.body.querySelector('puzzle').setAttribute('type', pzpr.variety(this.pid).kanpenid);
		}
		return "";
	}
646009
public static function DefaultRule () {
		return [
			//状態
			static::RULE_REQUIRE			=> [function ($value, $options, $meta = []) {return $value !== null;}, '必須入力項目 {:title}が入力されていません。'],
			static::RULE_NOT_EMPTY			=> [function ($value, $options, $meta = []) {return (is_array($value)) ? !empty($value) : preg_match("/[^\s]+/um", $value) === 1;}, '{:title}を入力してください。'],
			static::RULE_NOT_STRING_EMPTY	=> [function ($value, $options, $meta = []) {return (is_array($value)) ? !empty($value) : trim($value, "\r\n") !== '';}, '{:title}を入力してください。'],

			//逆状態
			static::RULE_NOT_REQUIRE		=> [function ($value, $options, $meta = []) {return $value === null;}, '必須除外項目 {:title}が入力されました。'],

			//スカラー値
			'bool'			=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_BOOLEAN);}, '{:title}には1, true, on, yesのいずれかを入力してください。'],
			'int'			=> [function ($value, $options, $meta = []) {return is_int(filter_var($value, \FILTER_VALIDATE_INT)) && 0 === preg_match("/\A[^0-9\-\+eEx]\z/", $value);}, '{:title}には整数を入力してください。'],
			'positive_int'	=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_INT) > -1;}, '{:title}には正の整数を入力してください。'],
			'negative_int'	=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_INT) < 1;}, '{:title}には負の整数を入力してください。'],
			'int_length'	=> [function ($value, $options, $meta = []) {return static::Length($value, ['length' => $options[0] ?? $options['length'] ?? null], $options);}, '{:title}は{:length:0}桁入力してください。'],
			'int_range'		=> [function ($value, $options, $meta = []) {return is_int(filter_var($value, \FILTER_VALIDATE_INT, $options));}, '{:title}には{:min_range:0}から{:max_range:1}までの間の半角数値を入力してください。'],
			'int_min_range'	=> [function ($value, $options, $meta = []) {return is_int(filter_var($value, \FILTER_VALIDATE_INT, ['min_range' => $options['min_range']]));}, '{:title}には{:min_range:0}以上の半角数値を入力してください。'],
			'int_max_range'	=> [function ($value, $options, $meta = []) {return is_int(filter_var($value, \FILTER_VALIDATE_INT, ['max_range' => $options['max_range']]));}, '{:title}には{:max_range:0}以下の半角数値を入力してください。'],

			'float'			=> [function ($value, $options, $meta = []) {return is_float(filter_var($value, \FILTER_VALIDATE_FLOAT)) && 0 === preg_match("/\A[^0-9\-\+eEx\.]\z/", $value);}, '{:title}には実数を入力してください。'],

			//bit演算
			'bit_any'		=> [function  ($value, $options, $meta = []) {$value = (int) $value;return $value !== 0 && $value === ($value & $options[0] ?? $options['bit'] ?? 0);}, '{:title}には有効なbit値を入力してください。'],
			'bit_or'		=> [function  ($value, $options, $meta = []) {$value = (int) $value;return $value !== 0 && $value === ($value & $options[0] ?? $options['bit'] ?? 0);}, '{:title}には有効なbit値を入力してください。'],

			//型
			'is_array'		=> [function ($value, $options, $meta = []) {return is_array($value);}, '{:title}には配列を設定してください。'],
			'is_bool'		=> [function ($value, $options, $meta = []) {return is_bool($value);}, '{:title}には真偽値を設定してください。'],
			'is_callable'	=> [function ($value, $options, $meta = []) {return is_callable($value);}, '{:title}にはコーラブルな値を設定してください。'],
			'is_double'		=> [function ($value, $options, $meta = []) {return is_double($value);}, '{:title}には浮動小数点を設定してください。'],
			'is_float'		=> [function ($value, $options, $meta = []) {return is_float($value);}, '{:title}には浮動小数点を設定してください。'],
			'is_int'		=> [function ($value, $options, $meta = []) {return is_int($value);}, '{:title}には整数を設定してください。'],
			'is_integer'	=> [function ($value, $options, $meta = []) {return is_integer($value);}, '{:title}には整数を設定してください。'],
			'is_iterable'	=> [function ($value, $options, $meta = []) {return is_iterable($value);}, '{:title}にはイテレータブルな値を設定してください。'],
			'is_long'		=> [function ($value, $options, $meta = []) {return is_long($value);}, '{:title}には整数を設定してください。'],
			'is_null'		=> [function ($value, $options, $meta = []) {return is_null($value);}, '{:title}にはNULLを設定してください。'],
			'is_numeric'	=> [function ($value, $options, $meta = []) {return is_numeric($value);}, '{:title}には数字または数値形式の文字列を設定してください。'],
			'is_object'		=> [function ($value, $options, $meta = []) {return is_object($value);}, '{:title}にはオブジェクトを設定してください。'],
			'is_real'		=> [function ($value, $options, $meta = []) {return is_real($value);}, '{:title}には浮動小数点を設定してください。'],
			'is_resource'	=> [function ($value, $options, $meta = []) {return is_resource($value);}, '{:title}にはリソース型の値を設定してください。'],
			'is_scalar'		=> [function ($value, $options, $meta = []) {return is_scalar($value);}, '{:title}にはスカラーな値を設定してください。'],
			'is_string'		=> [function ($value, $options, $meta = []) {return is_string($value);}, '{:title}には文字列を設定してください。'],

			//意味
			'num'			=> [function ($value, $options, $meta = []) {return ctype_digit($value);}, '{:title}には数値のみ入力してください。'],
			'numeric'		=> [function ($value, $options, $meta = []) {return ctype_digit($value);}, '{:title}には数値のみ入力してください。'],
			'digit'			=> [function ($value, $options, $meta = []) {return ctype_digit($value);}, '{:title}には数値のみ入力してください。'],
			'alpha'			=> [function ($value, $options, $meta = []) {return ctype_alpha($value);}, '{:title}にはアルファベットのみ入力してください。'],
			'alpha_num'		=> [function ($value, $options, $meta = []) {return ctype_alnum($value);}, '{:title}にはアルファベットと数字のみ入力してください。'],
			'blank'			=> ["/^\s/", '{:title}には空白以外を入力しないでください。'],
			'phone'			=> ["/^\d{2,4}\-\d{4}\-\d{4}\$/", '{:title}には電話番号を入力してください。例：000-0000-0000'],

			//PHP session id
			'session_id'	=> ["/\A[,0-9a-zA-Z\-]{1,128}\z/", '{:title}にはsession idとして有効な値を入力してください。'],

			//UUID
			'uuid_v4'		=> ["/\A[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-4[0-9a-fA-F]{3}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}\z/", '{:title}にはUUID v4を入力してください。'],

			//e-mail
			'email'			=> [function ($value, $options, $meta = []) {return is_string(filter_var($value, \FILTER_VALIDATE_EMAIL));}, '{:title}にはemailアドレスを入力してください。例：user@example.com'],
			'email_char'	=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_SANITIZE_EMAIL) === $value;}, '{:title}にはemailアドレスで使用できる文字を入力してください。'],
			'email_strict'	=> [function ($value, $options, $meta = []) {$separated_value = explode('@', $value);return isset($separated_value[1]) && filter_var($value, \FILTER_SANITIZE_EMAIL) === $value && checkdnsrr($separated_value[1], 'MX') && count(dns_get_record($separated_value[1], DNS_MX)) !== 0;}, '{:title}には有効なemailアドレスを入力してください。'],
			'email_include_localhost'	=> [function ($value, $options, $meta = []) {if (is_string(filter_var($value, \FILTER_VALIDATE_EMAIL))) {return true;};$separated_value = explode('@', $value);if (count($separated_value) !== 2 || $separated_value[1] !== 'localhost') {return false;};return is_string(filter_var($separated_value[0].'@example.com', \FILTER_VALIDATE_EMAIL));}, '{:title}には有効なemailアドレスを入力してください。'],
			'email_jp_limited'	=> [function ($value, $options, $meta = []) {return static::EmailJpLimited($value, $options, $meta);}, '{:title}にはemailアドレスを入力してください。例：user@example.com'],

			//IP addr
			'ip_addr'				=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_IP) === $value;}, '{:title}にはIPアドレスを入力してください。'],
			'ip_v4_addr'			=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4) === $value;}, '{:title}にはIP V4アドレスを入力してください。'],
			'ip_v6_addr'			=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6) === $value;}, '{:title}にはIP V6アドレスを入力してください。'],
			'no_private_ip_addr'	=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_NO_PRIV_RANGE) === $value;}, '{:title}にはプライベートIPアドレス以外のIPアドレスを入力してください。'],
			'no_res_ip_addr'		=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_NO_RES_RANGE) === $value;}, '{:title}には予約済みIPアドレス以外のIPアドレスを入力してください。'],

			//ホスト
			'hostname'				=> [function ($value, $options, $meta = []) {return static::Hostname($value, $options, $meta);}, '{:title}には有効なホスト名を入力してください。'],
			'host'					=> [function ($value, $options, $meta = []) {return static::Hostname($value, $options, $meta) || filter_var($value, \FILTER_VALIDATE_IP) === $value;}, '{:title}には有効なホスト名を入力してください。'],

			//ポート
			'port'							=> [function ($value, $options, $meta = []) {$length = strlen($value);return $length === strspn($value, '1234567890') && -0 < $value && $value < 65536;}, '{:title}には有効なポートを入力してください。'],
			'well_known_port'				=> [function ($value, $options, $meta = []) {$length = strlen($value);return $length === strspn($value, '1234567890') && -0 < $value && $value < 1024;}, '{:title}には有効なポートを入力してください。'],
			'registered_port'				=> [function ($value, $options, $meta = []) {$length = strlen($value);return $length === strspn($value, '1234567890') && 1023 < $value && $value < 49152;}, '{:title}には有効なポートを入力してください。'],
			'dynamic_and_or_private_ports'	=> [function ($value, $options, $meta = []) {$length = strlen($value);return $length === strspn($value, '1234567890') && 49151 < $value && $value < 65536;}, '{:title}には有効なポートを入力してください。'],

			//DNS
			'exists_host'		=> [function ($value, $options, $meta = []) {return checkdnsrr($value, $options['type']);}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_mx'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'MX');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_ns'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'NS');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_soa'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'SOA');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_ptr'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'PTR');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_cname'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'CNAME');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_aaaa'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'AAAA');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_a6'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'A6');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_srv'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'SRV');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_naptr'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'NAPTR');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_naptr'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'NAPTR');}, '{:title}には存在するホスト名を入力してください。'],
			'exists_host_any'	=> [function ($value, $options, $meta = []) {return checkdnsrr($value, 'ANY');}, '{:title}には存在するホスト名を入力してください。'],

			'exists_dns_record_mx'	=> [function ($value, $options, $meta = []) {return count(dns_get_record($value, DNS_MX)) !== 0;}, '{:title}には存在するホスト名を入力してください。'],

			//範囲
			'range'			=> [function ($value, $options, $meta = []) {return static::Range($value, $options, $options['format'] ?? null, $options);}, '{:title}には{:min_range:0}から{:max_range:1}までの間の値を入力してください。'],
			'min_range'		=> [function ($value, $options, $meta = []) {return static::Range($value, ['min_range' => $options[0] ?? $options['min_range'] ?? null], $options['format'] ?? null, $options);}, '{:title}には{:min_range:0}以上の値を入力してください。'],
			'max_range'		=> [function ($value, $options, $meta = []) {return static::Range($value, ['max_range' => $options[1] ?? $options['max_range'] ?? $options[0] ?? null], $options['format'] ?? null, $options);}, '{:title}には{:max_range:0}以下の値を入力してください。'],

			//日付
			'date'			=> [function ($value, $options, $meta = []) {return static::DateTime($value, $options['format'] ?? static::YMD);}, '{:title}には{:format:0}形式の日付を入力してください。'],
			'time'			=> [function ($value, $options, $meta = []) {return static::DateTime($value, $options['format'] ?? static::HIS);}, '{:title}には{:format:0}形式の時間を入力してください。'],
			'datetime'		=> [function ($value, $options, $meta = []) {return static::DateTime($value, $options['format'] ?? static::YMD_HIS);}, '{:title}には{:format:0}形式の日付と時間を入力してください。'],

			//文字列長さ
			'length'			=> [function ($value, $options, $meta = []) {return static::Length($value, ['length' => $options[0] ?? $options['length'] ?? null], $options);}, '{:title}は{:length:0}文字入力してください。'],
			'between_length'	=> [function ($value, $options, $meta = []) {return static::Length($value, $options, $options);}, '{:title}は{:min_length:0}文字以上{:max_length:1}文字以内で入力してください。'],
			'max_length'		=> [function ($value, $options, $meta = []) {return static::Length($value, ['max_length' => $options[0] ?? $options['max_length']], $options);}, '{:title}は{:max_length:0}文字以内で入力してください。'],
			'min_length'		=> [function ($value, $options, $meta = []) {return static::Length($value, ['min_length' => $options[0] ?? $options['min_length']], $options);}, '{:title}は{:min_length:0}文字以上入力してください。'],

			//カラーコード
			'color_code'	=> [function ($value, $options, $meta = []) {return \ickx\fw2\constants\web\ColorCode::IsHexColorCode($value);}, '{:title}には16進数のカラーコードを入力してください。'],

			//配列
			'in'					=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_IN,					$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}に未定義の値が入力されています。'],
			'not_in'				=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_NOT_IN,				$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}の値は利用できません。'],
			'not_overlap'			=> [function ($value, $options, $meta = []) {$tmp = [];foreach ($value as $element) {if (in_array($element, $tmp, true)) {return false;}$tmp[] = $element;}return true;}, '{:title}に重複した値があります。'],
			'key'					=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_KEY,					$options[0] ?? $options['key_set'] ?? null, $options);}, '{:title}に未定義の値が入力されています。'],
			'key_exists'			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_KEY_EXISTS,			$options[0] ?? $options['key_set'] ?? null, $options);}, '{:title}に未定義の値が入力されています。'],
			'any'					=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_ANY,					$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}に必須項目が含まれていません。'],
			'any_key_exists'		=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_ANY_KEY_EXISTS	,	$options[0] ?? $options['key_set'] ?? null, $options);}, '{:title}には{:key_set:0}のいずれかを入力してください。'],
			'not_any_key_exists'	=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_NOT_ANY_KEY_EXISTS,	$options[0] ?? $options['key_set'] ?? null, $options);}, '{:title}には{:key_set:0}のいずれかを入力してください。'],
			//'min'
			//'max'

			//比較
			'<'				=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_LT,		$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}には{:operand:0}未満の値を入力してください。'],
			'<='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_LT_EQ,	$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}には{:operand:0}以下の値を入力してください。'],
			'>'				=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_GT,		$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}には{:operand:0}より上の値を入力してください。'],
			'>='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_GT_EQ,	$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}には{:operand:0}以上の値を入力してください。'],
			'=='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_EQ,		$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}が{:operand:0}と異なります。'],
			'!='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_NOT_EQ,	$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}が{:operand:0}と同じです。'],
			'==='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_S_EQ,		$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}が{:operand:0}と異なります。'],
			'!=='			=> [function ($value, $options, $meta = []) {return static::Comparison($value, static::OP_S_NOT_EQ,	$options[0] ?? $options['operand'] ?? null, $options);}, '{:title}が{:operand:0}と同じです。'],

			//ファイルシステム
			'file_exists'	=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return file_exists($value);}, 'パス：{:value}は存在しません。'],
			'is_dir'		=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return is_dir($value);}, 'パス：{:value}はディレクトリではありません。'],
			'is_file'		=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return is_file($value);}, 'パス：{:value}はファイルではありません。'],
			'readable'		=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return is_readable($value);}, 'パス：{:value}は読み込めません。'],
			'writable'		=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return is_writable($value);}, 'パス：{:value}は書き込めません。'],
			'executable'	=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return is_executable($value);}, 'パス：{:value}は実行できません。'],
//			'file_size'		=> [function ($value, $options, $meta = []) {clearstatcache(true, $value);return filesize($value);}, 'パス：{:value}は存在しません。'],

			'parent_is_dir'		=> [function ($value, $options, $meta = []) {$value = dirname($value);clearstatcache(true, $value);return is_dir($value);}, 'パス：{:value}の親はディレクトリではありません。'],
			'parent_exists'		=> [function ($value, $options, $meta = []) {$value = dirname($value);clearstatcache(true, $value);return file_exists($value);}, 'パス：{:value}の親ディレクトリがありません。'],
			'parent_executable'	=> [function ($value, $options, $meta = []) {$value = dirname($value);clearstatcache(true, $value);return strtolower(substr(\PHP_OS, 0, 3)) === 'win' ? is_readable($value) : is_executable($value);}, 'パス：{:value}の親ディレクトリを開けません。'],
			'parent_readable'	=> [function ($value, $options, $meta = []) {$value = dirname($value);clearstatcache(true, $value);return is_readable($value);}, 'パス：{:value}の親ディレクトリを読み込めません。'],
			'parent_writable'	=> [function ($value, $options, $meta = []) {$value = dirname($value);clearstatcache(true, $value);return is_writable($value);}, 'パス：{:value}の親ディレクトリに書き込めません。'],

			//ファイルアップロード
			'upload_check_status'	=> [function ($value, $options, $meta = []) {return static::CheckUploadStatus($value, $options, $meta);}, '{:title}{:adjust}でエラーが発生しました。error code:{:error_code} {:validator_message}'],
			'upload_range_filesize'	=> [function ($value, $options, $meta = []) {return static::Range($value['size'], $options, $options['format'] ?? null, $options);}, '{:title}はファイルサイズを{:min_range:0}バイトから{:max_range:1}バイトまでの間にしてください。'],
			'upload_min_filesize'	=> [function ($value, $options, $meta = []) {return static::Range($value['size'], ['min_range' => $options[0] ?? $options['min_range'] ?? null], $options['format'] ?? null, $options);}, '{:title}はファイルサイズが{:min_range:0}バイト以上必要です。'],
			'upload_max_filesize'	=> [function ($value, $options, $meta = []) {return static::Range($value['size'], ['max_range' => $options[1] ?? $options['max_range'] ?? $options[0] ?? null], $options['format'] ?? null, $options);}, '{:title}はファイルサイズが{:max_range:0}バイト以下である必要があります。'],
			'upload_mimetype'		=> [function ($value, $options, $meta = []) {return $value['type'] > $options[0] ?? $options['max'] ?? null;} ,'{:title}は{:max:0}バイト以上にしてください。'],
			'upload_ext'			=> [function ($value, $options, $meta = []) {return $value['type'] > $options[0] ?? $options['max'] ?? null;} ,'{:title}は{:max:0}バイト以上にしてください。'],
			'upload_name'			=> [function ($value, $options, $meta = []) {return $value['type'] > $options[0] ?? $options['max'] ?? null;} ,'{:title}は{:max:0}バイト以上にしてください。'],

			//文字セット
			'charset_email'			=> [function ($value, $options, $meta = []) {$filterd_length = strlen(filter_var($value, \FILTER_SANITIZE_EMAIL));return $filterd_length !== 0 && $filterd_length === strlen($value);}, '{:title}にはemailに利用できる文字を入力してください。'],
			'charset_full_kana'		=> [function ($value, $options, $meta = []) {return 1 === preg_match(sprintf("/^[ァ-ヶぁ-ん%s]+$/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value);}, '{:title}に利用できない文字「{:reject_character:0}」が含まれています。', ['reject_character' => function ($value, $options, $meta = []) {preg_match_all(sprintf("/([^ァ-ヶぁ-ん%s])/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value, $reject_character);return implode(', ', array_unique($reject_character[1]));}],],
			'charset_full_katakana'	=> [function ($value, $options, $meta = []) {return 1 === preg_match(sprintf("/^[ァ-ヶ%s]+$/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value);}, '{:title}に利用できない文字「{:reject_character:0}」が含まれています。', ['reject_character' => function ($value, $options, $meta = []) {preg_match_all(sprintf("/([^ァ-ヶ%s])/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value, $reject_character);return implode(', ', array_unique($reject_character[1]));}],],
			'charset_full_hiragana'	=> [function ($value, $options, $meta = []) {return 1 === preg_match(sprintf("/^[ぁ-ん%s]+$/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value);}, '{:title}に利用できない文字「{:reject_character:0}」が含まれています。', ['reject_character' => function ($value, $options, $meta = []) {preg_match_all(sprintf("/([^ぁ-ん%s])/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value, $reject_character);return implode(', ', array_unique($reject_character[1]));}],],
			'charset_full_alpha'	=> [function ($value, $options, $meta = []) {return 1 === preg_match(sprintf("/^[ａ-ｚＡ-Ｚ%s]+$/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value);}, '{:title}に利用できない文字「{:reject_character:0}」が含まれています。', ['reject_character' => function ($value, $options, $meta = []) {preg_match_all(sprintf("/([^ａ-ｚＡ-Ｚ%s])/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value, $reject_character);return implode(', ', array_unique($reject_character[1]));}],],
			'charset_full_num'		=> [function ($value, $options, $meta = []) {return 1 === preg_match(sprintf("/^[０-９%s]+$/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value);}, '{:title}に利用できない文字「{:reject_character:0}」が含まれています。', ['reject_character' => function ($value, $options, $meta = []) {preg_match_all(sprintf("/([^０-９%s])/u", (isset($options['append_pattern']) ? $options['append_pattern'] : '')), $value, $reject_character);return implode(', ', array_unique($reject_character[1]));}],],

			//エンコーディング
			'utf8'			=> [function ($value, $options, $meta = []) {return static::Encoding($value, ['encoding' => 'UTF-8'] + $options);}, '{:title}がUTF-8ではなく{:encoding}になっています。'],
			'sjis-win'		=> [function ($value, $options, $meta = []) {return static::Encoding($value, ['encoding' => 'SJIS-win'] + $options);}, '{:title}がSJIS-winではなく{:encoding}になっています。'],
			'eucjp-win'		=> [function ($value, $options, $meta = []) {return static::Encoding($value, ['encoding' => 'eucJP-win'] + $options);}, '{:title}がeucJP-winではなく{:encoding}になっています。'],

			//PREG 互換正規表現
			'preg_regex'	=> [function ($value, $options, $meta = []) {return filter_var($value, \FILTER_VALIDATE_REGEXP) === $value;}, '{:title}にはPREG互換の正規表現を入力してください。'],

			//正規表現
			'regex'			=> [function ($value, $options, $meta = []) {return preg_match($options[0] ?? $options['regex'] ?? null, $value) === 1;}, '{:title}がパターンに一致しません。'],

			//クレジットカード
			'luhn'			=> [function ($value, $options, $meta = []) {for ($i = 0, $digits = strrev($digits), $alt = true, $total = 0; ($str = substr($digits, $i, 1)) !== false;$total += $alt ? $str : ($str < 5 ? $str * 2 : 1 + ($str - 5) * 2), $alt = !$alt, $i++); return $total % 10 === 0;}, '{:title}のチェックディジットが正しくありません。'],
			'credit_card'	=> [function ($value, $options, $meta = []) {return static::CreditCard($value, $options, $meta);}, '{:title}のクレジットカード番号が正しくありません。'],

			//パディング
			'padding'		=> [function ($value, $options, $meta = []) {return $value === str_pad($value, $options['length'], $options['char'], $options['vector']);}, '{:title}の値が正しくありません。'],
			'zero_padding'	=> [function ($value, $options, $meta = []) {return $value === str_pad($value, $options['length'], '0', \STR_PAD_LEFT);}, '{:title}の値が正しくありません。'],

			//HTML
			'html'				=> [function ($value, $options, $meta = []) {return static::Html($value, $options[0] ?? $options['value'] ?? null, $options);}, '{:title}に利用できない{:validator_message}が含まれています。'],
			'html_element'		=> [function ($value, $options, $meta = []) {return static::HtmlElement($value, $options[0] ?? $options['value'] ?? null, $options);}, '{:title}に利用できないHTML要素 {:validator_message}が含まれています。'],
			'html_tag'			=> [function ($value, $options, $meta = []) {return static::HtmlElement($value, $options[0] ?? $options['value'] ?? null, $options);}, '{:title}に利用できないHTMLタグ {:validator_message}が含まれています。'],
			'html_attribute'	=> [function ($value, $options, $meta = []) {return static::HtmlAttribute($value, $options[0] ?? $options['value'] ?? null, $options);}, '{:title}に利用できないHTML属性 {:validator_message}が含まれています。'],
			'html_attr'			=> [function ($value, $options, $meta = []) {return static::HtmlAttribute($value, $options[0] ?? $options['value'] ?? null, $options);}, '{:title}に利用できないHTML属性 {:validator_message}が含まれています。'],

			//コールバック
			'callback'		=> [function ($value, $options, $meta = []) {return static::Callback($value, $options, $meta);}, ''],
		];
	}
1301073
function parse (value, now) {
  now = now ? this.toDate(now) : new Date();
  if (!now) {
    return null;
  }
  // 営業日計算
  if (value.indexOf('営業日') !== -1) {
    value = suji(value);
    var matches = value.match(BIZ);
    if (matches) {
      return this.addBiz(now, matches[1] * (matches[2] === '前' ? -1 : 1));
    } else {
      return null;
    }
  // そのほか
  } else {
    return parseFn(value, this.startMonth, this._startWeek, now) ||
           toDatetimeFn(value, this.startMonth);
  }
}
390582
function convertFormatNumber (value, num) {
  // 序数
  if (num === 0) {
    return suji(value, '序数');
  }
  // 0埋め
  if (typeof value === 'number') {
    value = value + '';
    return value.length < num ? ('000000000' + value).slice(-num) : value;
  }
  // 切り捨て
  return num && num < value.length ? value.substring(0, num) : value;
}