This commit is contained in:
Enoch
2024-08-09 22:16:39 +08:00
commit d78b38e80f
3984 changed files with 416946 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
# Crontab
A crontab with precision in seconds written in PHP based on [workerman](https://github.com/walkor/workerman).
# Install
```
composer require workerman/crontab
```
# Usage
start.php
```php
<?php
use Workerman\Worker;
require __DIR__ . '/../vendor/autoload.php';
use Workerman\Crontab\Crontab;
$worker = new Worker();
$worker->onWorkerStart = function () {
// Execute the function in the first second of every minute.
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
};
Worker::runAll();
```
Run with commands `php start.php start` or php `start.php start -d`
+34
View File
@@ -0,0 +1,34 @@
{
"name": "workerman/crontab",
"type": "library",
"keywords": [
"crontab"
],
"homepage": "http://www.workerman.net",
"license": "MIT",
"description": "A crontab written in PHP based on workerman",
"authors": [
{
"name": "walkor",
"email": "walkor@workerman.net",
"homepage": "http://www.workerman.net",
"role": "Developer"
}
],
"support": {
"email": "walkor@workerman.net",
"issues": "https://github.com/walkor/workerman/issues",
"forum": "http://wenda.workerman.net/",
"wiki": "http://doc.workerman.net/",
"source": "https://github.com/walkor/crontab"
},
"require": {
"php": ">=7.0",
"workerman/workerman": ">=4.0.20"
},
"autoload": {
"psr-4": {
"Workerman\\Crontab\\": "./src"
}
}
}
+16
View File
@@ -0,0 +1,16 @@
<?php
use Workerman\Worker;
require __DIR__ . '/../vendor/autoload.php';
use Workerman\Crontab\Crontab;
$worker = new Worker();
$worker->onWorkerStart = function () {
// Execute the function in the first second of every minute.
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
};
Worker::runAll();
+177
View File
@@ -0,0 +1,177 @@
<?php
/**
* This file is part of workerman.
*
* Licensed under The MIT License
* For full copyright and license information, please see the MIT-LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @author walkor<walkor@workerman.net>
* @copyright walkor<walkor@workerman.net>
* @link http://www.workerman.net/
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Workerman\Crontab;
use Workerman\Timer;
/**
* Class Crontab
* @package Workerman\Crontab
*/
class Crontab
{
/**
* @var string
*/
protected $_rule;
/**
* @var callable
*/
protected $_callback;
/**
* @var string
*/
protected $_name;
/**
* @var int
*/
protected $_id;
/**
* @var array
*/
protected static $_instances = [];
/**
* Crontab constructor.
* @param string $rule
* @param callable $callback
* @param string $name
*/
public function __construct($rule, $callback, $name = '')
{
$this->_rule = $rule;
$this->_callback = $callback;
$this->_name = $name;
$this->_id = static::createId();
static::$_instances[$this->_id] = $this;
static::tryInit();
}
/**
* @return string
*/
public function getRule()
{
return $this->_rule;
}
/**
* @return callable
*/
public function getCallback()
{
return $this->_callback;
}
/**
* @return string
*/
public function getName()
{
return $this->_name;
}
/**
* @return int
*/
public function getId()
{
return $this->_id;
}
/**
* @return bool
*/
public function destroy()
{
return static::remove($this->_id);
}
/**
* @return array
*/
public static function getAll()
{
return static::$_instances;
}
/**
* @param $id
* @return bool
*/
public static function remove($id)
{
if ($id instanceof Crontab) {
$id = $id->getId();
}
if (!isset(static::$_instances[$id])) {
return false;
}
unset(static::$_instances[$id]);
return true;
}
/**
* @return int
*/
protected static function createId()
{
static $id = 0;
return ++$id;
}
/**
* tryInit
*/
protected static function tryInit()
{
static $inited = false;
if ($inited) {
return;
}
$inited = true;
$parser = new Parser();
$callback = function () use ($parser, &$callback) {
foreach (static::$_instances as $crontab) {
$rule = $crontab->getRule();
$cb = $crontab->getCallback();
if (!$cb || !$rule) {
continue;
}
$times = $parser->parse($rule);
$now = time();
foreach ($times as $time) {
$t = $time-$now;
if ($t <= 0) {
$t = 0.000001;
}
Timer::add($t, $cb, null, false);
}
}
Timer::add(60 - time()%60, $callback, null, false);
};
$next_time = time()%60;
if ($next_time == 0) {
$next_time = 0.00001;
} else {
$next_time = 60 - $next_time;
}
Timer::add($next_time, $callback, null, false);
}
}
+171
View File
@@ -0,0 +1,171 @@
<?php
/**
* @author: Jan Konieczny <jkonieczny@gmail.com>, group@hyperf.io
* @license: http://www.gnu.org/licenses/
* @license: https://github.com/hyperf/hyperf/blob/master/LICENSE
*
* This is a simple script to parse crontab syntax to get the execution time
*
* Eg.: $timestamp = Crontab::parse('12 * * * 1-5');
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Provides basic cron syntax parsing functionality
*
* @author: Jan Konieczny <jkonieczny@gmail.com>, group@hyperf.io
* @license: http://www.gnu.org/licenses/
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Workerman\Crontab;
/**
* Class Parser
* @package Workerman\Crontab
*/
class Parser
{
/**
* Finds next execution time(stamp) parsin crontab syntax.
*
* @param string $crontab_string :
* 0 1 2 3 4 5
* * * * * * *
* - - - - - -
* | | | | | |
* | | | | | +----- day of week (0 - 6) (Sunday=0)
* | | | | +----- month (1 - 12)
* | | | +------- day of month (1 - 31)
* | | +--------- hour (0 - 23)
* | +----------- min (0 - 59)
* +------------- sec (0-59)
*
* @param null|int $start_time
* @throws \InvalidArgumentException
* @return int[]
*/
public function parse($crontab_string, $start_time = null)
{
if (! $this->isValid($crontab_string)) {
throw new \InvalidArgumentException('Invalid cron string: ' . $crontab_string);
}
$start_time = $start_time ? $start_time : time();
$date = $this->parseDate($crontab_string);
if (in_array((int) date('i', $start_time), $date['minutes'])
&& in_array((int) date('G', $start_time), $date['hours'])
&& in_array((int) date('j', $start_time), $date['day'])
&& in_array((int) date('w', $start_time), $date['week'])
&& in_array((int) date('n', $start_time), $date['month'])
) {
$result = [];
foreach ($date['second'] as $second) {
$result[] = $start_time + $second;
}
return $result;
}
return [];
}
public function isValid(string $crontab_string): bool
{
if (! preg_match('/^((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)$/i', trim($crontab_string))) {
if (! preg_match('/^((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)\s+((\*(\/[0-9]+)?)|[0-9\-\,\/]+)$/i', trim($crontab_string))) {
return false;
}
}
return true;
}
/**
* Parse each segment of crontab string.
*/
protected function parseSegment(string $string, int $min, int $max, int $start = null)
{
if ($start === null || $start < $min) {
$start = $min;
}
$result = [];
if ($string === '*') {
for ($i = $start; $i <= $max; ++$i) {
$result[] = $i;
}
} elseif (strpos($string, ',') !== false) {
$exploded = explode(',', $string);
foreach ($exploded as $value) {
if (strpos($value, '/') !== false || strpos($string, '-') !== false) {
$result = array_merge($result, $this->parseSegment($value, $min, $max, $start));
continue;
}
if (trim($value) === '' || ! $this->between((int) $value, (int) ($min > $start ? $min : $start), (int) $max)) {
continue;
}
$result[] = (int) $value;
}
} elseif (strpos($string, '/') !== false) {
$exploded = explode('/', $string);
if (strpos($exploded[0], '-') !== false) {
[$nMin, $nMax] = explode('-', $exploded[0]);
$nMin > $min && $min = (int) $nMin;
$nMax < $max && $max = (int) $nMax;
}
$start < $min && $start = $min;
for ($i = $start; $i <= $max;) {
$result[] = $i;
$i += $exploded[1];
}
} elseif (strpos($string, '-') !== false) {
$result = array_merge($result, $this->parseSegment($string . '/1', $min, $max, $start));
} elseif ($this->between((int) $string, $min > $start ? $min : $start, $max)) {
$result[] = (int) $string;
}
return $result;
}
/**
* Determire if the $value is between in $min and $max ?
*/
private function between(int $value, int $min, int $max): bool
{
return $value >= $min && $value <= $max;
}
private function parseDate(string $crontab_string): array
{
$cron = preg_split('/[\\s]+/i', trim($crontab_string));
if (count($cron) == 6) {
$date = [
'second' => $this->parseSegment($cron[0], 0, 59),
'minutes' => $this->parseSegment($cron[1], 0, 59),
'hours' => $this->parseSegment($cron[2], 0, 23),
'day' => $this->parseSegment($cron[3], 1, 31),
'month' => $this->parseSegment($cron[4], 1, 12),
'week' => $this->parseSegment($cron[5], 0, 6),
];
} else {
$date = [
'second' => [1 => 0],
'minutes' => $this->parseSegment($cron[0], 0, 59),
'hours' => $this->parseSegment($cron[1], 0, 23),
'day' => $this->parseSegment($cron[2], 1, 31),
'month' => $this->parseSegment($cron[3], 1, 12),
'week' => $this->parseSegment($cron[4], 0, 6),
];
}
return $date;
}
}
+161
View File
@@ -0,0 +1,161 @@
# Changes in Respect\Validation 2.x
## 2.3
Versioning Changes:
- Dropped support for PHP 7.4.
- Updated dev dependencies
Deprecations:
- Symfony façade validators are no longer supported and were
removed.
Fixes:
- `KeySet` now reports which extra keys are causing the rule to fail.
Changes:
- You can no longer wrap `KeySet` in `Not`.
- `Phone` now uses `giggsey/libphonenumber-for-php`, this package needs
to be installed if you want to use this validator.
- `Phone` now supports the parameter `$countryCode` to validate phones
of a specific country.
## 2.2.4
Meta:
- CHANGELOG.md is being written once again to provide an overview
of active changes to the API and codebase.
Versioning Changes:
- Dropped PHP 7.3 support.
- Added support for PHP 8.0 and PHP 8.1. This will be the
last release with PHP 7.4 support. Support for PHP 8.2 is considered
experimental, local development should be done at 8.1.
Deprecations:
- Zend Framework façade validators are no longer supported and were
removed.
- Symfony façade validators are no longer suggested, and will be
removed in release 2.3.
- v::dateTime('z') is not supported anymore in PHP8, and should not be relied upon
Fixes:
- Updated bin/update-currency-codes to fetch XML from another source.
- Updated bin/update-iso-codes to new file format.
- Updated regionals (CountryCode.php, CurrencyCode.php, Tld.php) (2023-02-13).
- Added RuPay card validation (thanks @rakshit087)
- Fixed `v::decimal()` for float values (thanks @scruwi)
- Added `v::portugueseNif()` to validate _Número de Identificação Fiscal_ in Portugal (thanks @goncalo-andrade).
- Allow 5-digit and 6-digit postal codes for Cambodia (thanks @omega3000)
- `v::intval()` now handles negative values with trailing zeroes better (thanks @l-x)
## 2.2.x
Changelogs between 1.1.0 and 2.2.4 are available only through `git log` and GitHub Releases.
# Changes in Respect\Validation 1.x
All notable changes of the Respect\Validation releases are documented in this file.
## 1.1.0 - 2016-04-24
### Added
- Create "Fibonacci" rule (#637)
- Create "IdentityCard" rule (#632)
- Create "Image" rule (#621)
- Create "LanguageCode" rule (#597)
- Create "Pesel" rule (#616)
- Create "PhpLabel" rule (#652)
### Changed
- Allow the define brands for credit card validation (#661)
- Define names for the child of Not rule (#641)
- Ensure namespace separator on appended prefixes (#666)
- Length gets length of integers (#643)
- Set template for the only rule in the chain (#663)
- Throw an exception when age is not an integer (#667)
- Use "{less/greater} than or equal to" phrasing (#604)
## 1.0.0 - 2015-10-24
### Added
- Add "alpha-3" and "numeric" formats for "CountryCode" rule (#530)
- Add support for PHP 7 (#426)
- Create "BoolVal" rule (#583)
- Create "Bsn" rule (#450)
- Create "CallableType" rule (#397)
- Create "Countable" rule (#566)
- Create "CurrencyCode" rule (#567)
- Create "Extension" rule (#360)
- Create "Factor" rule (#405)
- Create "Finite" rule (#397)
- Create "FloatType" rule (#565)
- Create "Identical" rule (#442)
- Create "Imei" rule (#590)
- Create "Infinite" rule (#397)
- Create "IntType" rule (#451)
- Create "Iterable" rule (#570)
- Create "KeyNested" rule (#429)
- Create "KeySet" rule (#374)
- Create "KeyValue" rule (#441)
- Create "Mimetype" rule (#361)
- Create "NotBlank" rule (#443)
- Create "NotOptional" rule (#448)
- Create "Optional" rule (#423)
- Create "ResourceType" rule (#397)
- Create "ScalarVal" rule (#397)
- Create "Size" rule (#359)
- Create "SubdivisionCode" rule for 252 countries (#411)
- Create "VideoUrl" rule (#410)
- Create method `getMessages()` for nested exceptions (#406)
### Changed
- Add country code to the message of "PostalCode" exception rule (#413)
- Make "ArrayVal" validate only if the input can be used as an array (#574)
- Make "Between" rule inclusive (#445)
- Make "Max" rule inclusive (#445)
- Make "Min" rule inclusive (#445)
- New generic top-level domains (#368)
- On `AbstractRelated` (`Attribute`, `Call` and `Key`) define names for child rules (#365)
- On exceptions, convert `Array` to string (#387)
- On exceptions, convert `Exception` to string (#399)
- On exceptions, convert `Traversable` to string (#399)
- On exceptions, convert resources to string (#399)
- On exceptions, do not display parent message then rule has only one child (#407)
- On exceptions, improve `Object` conversion to string (#399)
- On exceptions, improve conversion of all values by using JSON (#399)
- On exceptions, nested messages are displayed in a Markdown list (#588)
- Rename exception class "AbstractGroupedException" to "GroupedValidationException" (#591)
- Rename exception class "AbstractNestedException" to "NestedValidationException" (#591)
- Rename rule "Arr" to "ArrayVal"
- Rename rule "Bool" to "BoolType" (#426)
- Rename rule "False" to "FalseVal" (#426)
- Rename rule "Float" to "FloatVal" (#426)
- Rename rule "Int" to "IntVal" (#426)
- Rename rule "NullValue" to "NullType"
- Rename rule "Object" to "ObjectType"
- Rename rule "String" to "StringType" (#426)
- Rename rule "True" to "TrueVal" (#426)
- Use `filter_var()` on "TrueVal" and "FalseVal" rules (#409)
### Removed
- Drop support for PHP 5.3 (#466)
- Remove `addOr()` shortcut (#444)
- Remove `NestedValidationExceptionInterface` interface (#591)
- Remove `not()` shortcut (#444)
- Remove `ValidationExceptionInterface` interface (#591)
- Remove identical checking from "Equals" rule (#442)
- Removed Deprecated Rules (#277)
- Validation rules do not accept an empty string by default (#422)
+244
View File
@@ -0,0 +1,244 @@
# Contributing
Contributions to Respect\Validation are always welcome. You make our lives
easier by sending us your contributions through [pull requests][].
Pull requests for bug fixes must be based on the oldest stable version's branch
whereas pull requests for new features must be based on the `master` branch.
Due to time constraints, we are not always able to respond as quickly as we
would like. Please do not take delays personal and feel free to remind us here,
on IRC, or on Gitter if you feel that we forgot to respond.
Please see the [project documentation][] before proceeding. You should also know
about [PHP-FIG][]'s standards and basic unit testing, but we're sure you can
learn that just by looking at other rules. Pick the simple ones like `ArrayType`
to begin.
Before writing anything, feature or bug fix:
- Check if there is already an issue related to it (opened or closed) and if
someone is already working on that;
- If there is not, [open an issue][] and notify everybody that you're going
to work on that;
- If there is, create a comment to notify everybody that you're going to
work on that.
- Make sure that what you need is not done yet
## Adding a new validator
A common validator (rule) on Respect\Validation is composed of three classes:
* `library/Rules/YourRuleName.php`: the rule itself
* `library/Exceptions/YourRuleNameException.php`: the exception thrown by the rule
* `tests/unit/Rules/YourRuleNameTest.php`: tests for the rule
The classes are pretty straightforward. In the sample below, we're going to
create a validator that validates if a string is equal to "Hello World".
- Classes should be `final` unless they are used in a different scope;
- Properties should be `private` unless they are used in a different scope;
- Classes should use strict typing;
- Some docblocks are required.
### Creating the rule
The rule itself needs to implement the `Validatable` interface but, it is
convenient to just extend the `AbstractRule` class.
Doing that, you'll only need to declare one method: `validate($input)`.
This method must return `true` or `false`.
If your validator class is `HelloWorld`, it will be available as `v::helloWorld()`
and will natively have support for chaining and everything else.
```php
<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-License-Identifier: MIT
*/
declare(strict_types=1);
namespace Respect\Validation\Rules;
/**
* Explain in one sentence what this rule does.
*
* @author Your Name <youremail@yourdomain.tld>
*/
final class HelloWorld extends AbstractRule
{
/**
* {@inheritDoc}
*/
public function validate($input): bool
{
return $input === 'Hello World';
}
}
```
### Creating the rule exception
Just that and we're done with the rule code. The Exception requires you to
declare messages used by `assert()` and `check()`. Messages are declared in
affirmative and negative moods, so if anyone calls `v::not(v::helloWorld())` the
library will show the appropriate message.
```php
<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-License-Identifier: MIT
*/
declare(strict_types=1);
namespace Respect\Validation\Exceptions;
/**
* @author Your Name <youremail@yourdomain.tld>
*/
final class HelloWorldException extends ValidationException
{
/**
* {@inheritDoc}
*/
protected $defaultTemplates = [
self::MODE_DEFAULT => [
self::STANDARD => '{{name}} must be a Hello World',
],
self::MODE_NEGATIVE => [
self::STANDARD => '{{name}} must not be a Hello World',
]
];
}
```
### Creating unit tests
Finally, we need to test if everything is running smooth. We have `RuleTestCase`
that allows us to make easier to test rules, but you fell free to use the
`PHPUnit\Framework\TestCase` if you want or you need it's necessary.
The `RuleTestCase` extends PHPUnit's `PHPUnit\Framework\TestCase` class, so you
are able to use any methods of it. By extending `RuleTestCase` you should
implement two methods that should return a [data provider][] with the rule as
first item of the arrays:
- `providerForValidInput`: Will test when `validate()` should return `true`
- `providerForInvalidInput`: Will test when `validate()` should return `false`
```php
<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-License-Identifier: MIT
*/
declare(strict_types=1);
namespace Respect\Validation\Rules;
use Respect\Validation\Test\RuleTestCase;
/**
* @group rule
*
* @covers \Respect\Validation\Rules\HelloWorld
*
* @author Your Name <youremail@yourdomain.tld>
*/
final class HelloWorldTest extends RuleTestCase
{
/**
* {@inheritDoc}
*/
public static function providerForValidInput(): array
{
$rule = new HelloWorld();
return [
[$rule, 'Hello World'],
];
}
/**
* {@inheritDoc}
*/
public static function providerForInvalidInput(): array
{
$rule = new HelloWorld();
return [
[$rule, 'Not a hello'],
[$rule, 'Hello darkness, my old friend'],
[$rule, 'Hello is it me you\'re looking for?'],
];
}
}
```
If the constructor of your rule accepts arguments you may create specific tests
for it other than what is covered by `RuleTestCase`.
### Helping us a little bit more
You rule will be accepted only with these 3 files (rule, exception and unit test),
but if you really want to help us, you can follow the example of [ArrayType][] by:
- Adding your new rule on the `Validator`'s class docblock;
- Writing a documentation for your new rule;
- Creating integration tests with PHPT.
As we already said, none of them are required but you will help us a lot.
## Documentation
Our docs at https://respect-validation.readthedocs.io are generated from our
Markdown files. Add your brand new rule and it should be soon available.
## Running Tests
After run `composer install` on the library's root directory you must run PHPUnit.
### Linux
You can test the project using the commands:
```sh
$ vendor/bin/phpunit
```
or
```sh
$ composer phpunit
```
### Windows
You can test the project using the commands:
```sh
> vendor\bin\phpunit
```
or
```sh
> composer phpunit
```
No test should fail.
You can tweak the PHPUnit's settings by copying `phpunit.xml.dist` to `phpunit.xml`
and changing it according to your needs.
[ArrayType]: https://github.com/Respect/Validation/commit/f08a1fa
[data provider]: https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers "PHPUnit Data Providers"
[open an issue]: http://github.com/Respect/Validation/issues
[PHP-FIG]: http://www.php-fig.org "PHP Framework Interop Group"
[project documentation]: https://respect-validation.readthedocs.io/ "Respect\Validation documentation"
[pull requests]: http://help.github.com/pull-requests "GitHub pull requests"
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+20
View File
@@ -0,0 +1,20 @@
# [Respect\Validation 验证器](https://github.com/Respect/Validation) 汉化版
# Respect\Validation
[![Build Status](https://img.shields.io/github/actions/workflow/status/Respect/Validation/continuous-integration.yml?branch=master&style=flat-square)](https://github.com/Respect/Validation/actions/workflows/continuous-integration.yml)
[![Code Coverage](https://img.shields.io/codecov/c/github/Respect/Validation?style=flat-square)](https://codecov.io/gh/Respect/Validation)
[![Latest Stable Version](https://img.shields.io/packagist/v/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation)
[![Total Downloads](https://img.shields.io/packagist/dt/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation)
[![License](https://img.shields.io/packagist/l/respect/validation.svg?style=flat-square)](https://packagist.org/packages/respect/validation)
The most awesome validation engine ever created for PHP.
- Complex rules made simple: `v::numericVal()->positive()->between(1, 255)->validate($input)`.
- [Granularity control](docs/feature-guide.md#validation-methods) for advanced reporting.
- [More than 150](docs/list-of-rules.md) (fully tested) validation rules.
- [A concrete API](docs/concrete-api.md) for non fluent usage.
Learn More:
* [Documentation](https://respect-validation.readthedocs.io)
* [How to contribute](CONTRIBUTING.md)
+73
View File
@@ -0,0 +1,73 @@
{
"name": "workerman/validation",
"description": "The most awesome validation engine ever created for PHP. Respect/Validation 汉化版本",
"keywords": ["respect", "validation", "validator"],
"type": "library",
"homepage": "http://respect.github.io/Validation/",
"license": "MIT",
"authors": [
{
"name": "Respect/Validation Contributors",
"homepage": "https://github.com/Respect/Validation/graphs/contributors"
}
],
"config": {
"sort-packages": true,
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
}
},
"require": {
"php": "^8.0 || ^8.1 || ^8.2",
"respect/stringifier": "^0.2.0",
"symfony/polyfill-mbstring": "^1.2"
},
"require-dev": {
"egulias/email-validator": "^3.0",
"giggsey/libphonenumber-for-php-lite": "^8.13",
"malukenho/docheader": "^1.0",
"mikey179/vfsstream": "^1.6",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-deprecation-rules": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpunit/phpunit": "^9.6",
"psr/http-message": "^1.0",
"respect/coding-standard": "^3.0",
"squizlabs/php_codesniffer": "^3.7"
},
"suggest": {
"ext-bcmath": "Arbitrary Precision Mathematics",
"ext-fileinfo": "File Information",
"ext-mbstring": "Multibyte String Functions",
"egulias/email-validator": "Improves the Email rule if available",
"giggsey/libphonenumber-for-php-lite": "Enables the phone rule if available"
},
"autoload": {
"psr-4": {
"Respect\\Validation\\": "library/"
}
},
"autoload-dev": {
"psr-4": {
"Respect\\Validation\\": "tests/unit/",
"Respect\\Validation\\Test\\": "tests/library/"
},
"files": [
"tests/integration/lib/helpers.php"
]
},
"scripts": {
"docheader": "vendor/bin/docheader check library/ tests/",
"phpcs": "vendor/bin/phpcs",
"phpstan": "vendor/bin/phpstan analyze",
"phpunit": "vendor/bin/phpunit",
"phpunit-integration": "vendor/bin/phpunit --testsuite=integration",
"phpunit-unit": "vendor/bin/phpunit --testsuite=unit",
"qa": [
"@docheader",
"@phpcs",
"@phpstan",
"@phpunit"
]
}
}
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.AC',
'EDU.AC',
'GOV.AC',
'MIL.AC',
'NET.AC',
'ORG.AC',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'NOM.AD',
];
@@ -0,0 +1,12 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.AE',
'CO.AE',
'GOV.AE',
'MIL.AE',
'NET.AE',
'ORG.AE',
'SCH.AE',
];
@@ -0,0 +1,91 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ACCIDENT-INVESTIGATION.AERO',
'ACCIDENT-PREVENTION.AERO',
'AEROBATIC.AERO',
'AEROCLUB.AERO',
'AERODROME.AERO',
'AGENTS.AERO',
'AIR-SURVEILLANCE.AERO',
'AIR-TRAFFIC-CONTROL.AERO',
'AIRCRAFT.AERO',
'AIRLINE.AERO',
'AIRPORT.AERO',
'AIRTRAFFIC.AERO',
'AMBULANCE.AERO',
'AMUSEMENT.AERO',
'ASSOCIATION.AERO',
'AUTHOR.AERO',
'BALLOONING.AERO',
'BROKER.AERO',
'CAA.AERO',
'CARGO.AERO',
'CATERING.AERO',
'CERTIFICATION.AERO',
'CHAMPIONSHIP.AERO',
'CHARTER.AERO',
'CIVILAVIATION.AERO',
'CLUB.AERO',
'CONFERENCE.AERO',
'CONSULTANT.AERO',
'CONSULTING.AERO',
'CONTROL.AERO',
'COUNCIL.AERO',
'CREW.AERO',
'DESIGN.AERO',
'DGCA.AERO',
'EDUCATOR.AERO',
'EMERGENCY.AERO',
'ENGINE.AERO',
'ENGINEER.AERO',
'ENTERTAINMENT.AERO',
'EQUIPMENT.AERO',
'EXCHANGE.AERO',
'EXPRESS.AERO',
'FEDERATION.AERO',
'FLIGHT.AERO',
'FUEL.AERO',
'GLIDING.AERO',
'GOVERNMENT.AERO',
'GROUNDHANDLING.AERO',
'GROUP.AERO',
'HANGGLIDING.AERO',
'HOMEBUILT.AERO',
'INSURANCE.AERO',
'JOURNAL.AERO',
'JOURNALIST.AERO',
'LEASING.AERO',
'LOGISTICS.AERO',
'MAGAZINE.AERO',
'MAINTENANCE.AERO',
'MEDIA.AERO',
'MICROLIGHT.AERO',
'MODELLING.AERO',
'NAVIGATION.AERO',
'PARACHUTING.AERO',
'PARAGLIDING.AERO',
'PASSENGER-ASSOCIATION.AERO',
'PILOT.AERO',
'PRESS.AERO',
'PRODUCTION.AERO',
'RECREATION.AERO',
'REPBODY.AERO',
'RES.AERO',
'RESEARCH.AERO',
'ROTORCRAFT.AERO',
'SAFETY.AERO',
'SCIENTIST.AERO',
'SERVICES.AERO',
'SHOW.AERO',
'SKYDIVING.AERO',
'SOFTWARE.AERO',
'STUDENT.AERO',
'TRADER.AERO',
'TRADING.AERO',
'TRAINER.AERO',
'UNION.AERO',
'WORKINGGROUP.AERO',
'WORKS.AERO',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.AF',
'EDU.AF',
'GOV.AF',
'NET.AF',
'ORG.AF',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.AG',
'COM.AG',
'NET.AG',
'NOM.AG',
'ORG.AG',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.AI',
'NET.AI',
'OFF.AI',
'ORG.AI',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.AL',
'EDU.AL',
'GOV.AL',
'MIL.AL',
'NET.AL',
'ORG.AL',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.AM',
'COM.AM',
'COMMUNE.AM',
'NET.AM',
'ORG.AM',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.AO',
'ED.AO',
'GV.AO',
'IT.AO',
'OG.AO',
'PB.AO',
];
@@ -0,0 +1,19 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'BET.AR',
'COM.AR',
'COOP.AR',
'EDU.AR',
'GOB.AR',
'GOV.AR',
'INT.AR',
'MIL.AR',
'MUSICA.AR',
'MUTUAL.AR',
'NET.AR',
'ORG.AR',
'SENASA.AR',
'TUR.AR',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'E164.ARPA',
'IN-ADDR.ARPA',
'IP6.ARPA',
'IRIS.ARPA',
'URI.ARPA',
'URN.ARPA',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'GOV.AS',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.AT',
'CO.AT',
'GV.AT',
'OR.AT',
'STH.AC.AT',
];
@@ -0,0 +1,38 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ACT.AU',
'ACT.EDU.AU',
'ASN.AU',
'CATHOLIC.EDU.AU',
'COM.AU',
'CONF.AU',
'EDU.AU',
'GOV.AU',
'ID.AU',
'INFO.AU',
'NET.AU',
'NSW.AU',
'NSW.EDU.AU',
'NT.AU',
'NT.EDU.AU',
'ORG.AU',
'OZ.AU',
'QLD.AU',
'QLD.EDU.AU',
'QLD.GOV.AU',
'SA.AU',
'SA.EDU.AU',
'SA.GOV.AU',
'SCHOOLS.NSW.EDU.AU',
'TAS.AU',
'TAS.EDU.AU',
'TAS.GOV.AU',
'VIC.AU',
'VIC.EDU.AU',
'VIC.GOV.AU',
'WA.AU',
'WA.EDU.AU',
'WA.GOV.AU',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.AW',
];
@@ -0,0 +1,17 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'BIZ.AZ',
'COM.AZ',
'EDU.AZ',
'GOV.AZ',
'INFO.AZ',
'INT.AZ',
'MIL.AZ',
'NAME.AZ',
'NET.AZ',
'ORG.AZ',
'PP.AZ',
'PRO.AZ',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BA',
'EDU.BA',
'GOV.BA',
'MIL.BA',
'NET.BA',
'ORG.BA',
];
@@ -0,0 +1,15 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'BIZ.BB',
'CO.BB',
'COM.BB',
'EDU.BB',
'GOV.BB',
'INFO.BB',
'NET.BB',
'ORG.BB',
'STORE.BB',
'TV.BB',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.BE',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'GOV.BF',
];
@@ -0,0 +1,41 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'0.BG',
'1.BG',
'2.BG',
'3.BG',
'4.BG',
'5.BG',
'6.BG',
'7.BG',
'8.BG',
'9.BG',
'A.BG',
'B.BG',
'C.BG',
'D.BG',
'E.BG',
'F.BG',
'G.BG',
'H.BG',
'I.BG',
'J.BG',
'K.BG',
'L.BG',
'M.BG',
'N.BG',
'O.BG',
'P.BG',
'Q.BG',
'R.BG',
'S.BG',
'T.BG',
'U.BG',
'V.BG',
'W.BG',
'X.BG',
'Y.BG',
'Z.BG',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BH',
'EDU.BH',
'GOV.BH',
'NET.BH',
'ORG.BH',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.BI',
'COM.BI',
'EDU.BI',
'OR.BI',
'ORG.BI',
];
@@ -0,0 +1,25 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AFRICA.BJ',
'AGRO.BJ',
'ARCHITECTES.BJ',
'ASSUR.BJ',
'AVOCATS.BJ',
'CO.BJ',
'COM.BJ',
'ECO.BJ',
'ECONO.BJ',
'EDU.BJ',
'INFO.BJ',
'LOISIRS.BJ',
'MONEY.BJ',
'NET.BJ',
'ORG.BJ',
'OTE.BJ',
'RESTAURANT.BJ',
'RESTO.BJ',
'TOURISM.BJ',
'UNIV.BJ',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BM',
'EDU.BM',
'GOV.BM',
'NET.BM',
'ORG.BM',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BN',
'EDU.BN',
'GOV.BN',
'NET.BN',
'ORG.BN',
];
@@ -0,0 +1,46 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ACADEMIA.BO',
'AGRO.BO',
'ARTE.BO',
'BLOG.BO',
'BOLIVIA.BO',
'CIENCIA.BO',
'COM.BO',
'COOPERATIVA.BO',
'DEMOCRACIA.BO',
'DEPORTE.BO',
'ECOLOGIA.BO',
'ECONOMIA.BO',
'EDU.BO',
'EMPRESA.BO',
'GOB.BO',
'INDIGENA.BO',
'INDUSTRIA.BO',
'INFO.BO',
'INT.BO',
'MEDICINA.BO',
'MIL.BO',
'MOVIMIENTO.BO',
'MUSICA.BO',
'NATURAL.BO',
'NET.BO',
'NOMBRE.BO',
'NOTICIAS.BO',
'ORG.BO',
'PATRIA.BO',
'PLURINACIONAL.BO',
'POLITICA.BO',
'PROFESIONAL.BO',
'PUEBLO.BO',
'REVISTA.BO',
'SALUD.BO',
'TECNOLOGIA.BO',
'TKSAT.BO',
'TRANSPORTE.BO',
'TV.BO',
'WEB.BO',
'WIKI.BO',
];
@@ -0,0 +1,173 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'9GUACU.BR',
'ABC.BR',
'AC.GOV.BR',
'ADM.BR',
'ADV.BR',
'AGR.BR',
'AJU.BR',
'AL.GOV.BR',
'AM.BR',
'AM.GOV.BR',
'ANANI.BR',
'AP.GOV.BR',
'APARECIDA.BR',
'APP.BR',
'ARQ.BR',
'ART.BR',
'ATO.BR',
'B.BR',
'BA.GOV.BR',
'BARUERI.BR',
'BELEM.BR',
'BHZ.BR',
'BIB.BR',
'BIO.BR',
'BLOG.BR',
'BMD.BR',
'BOAVISTA.BR',
'BSB.BR',
'CAMPINAGRANDE.BR',
'CAMPINAS.BR',
'CAXIAS.BR',
'CE.GOV.BR',
'CIM.BR',
'CNG.BR',
'CNT.BR',
'COM.BR',
'CONTAGEM.BR',
'COOP.BR',
'COZ.BR',
'CRI.BR',
'CUIABA.BR',
'CURITIBA.BR',
'DEF.BR',
'DES.BR',
'DET.BR',
'DEV.BR',
'DF.GOV.BR',
'ECN.BR',
'ECO.BR',
'EDU.BR',
'EMP.BR',
'ENF.BR',
'ENG.BR',
'ES.GOV.BR',
'ESP.BR',
'ETC.BR',
'ETI.BR',
'FAR.BR',
'FEIRA.BR',
'FLOG.BR',
'FLORIPA.BR',
'FM.BR',
'FND.BR',
'FORTAL.BR',
'FOT.BR',
'FOZ.BR',
'FST.BR',
'G12.BR',
'GEO.BR',
'GGF.BR',
'GO.GOV.BR',
'GOIANIA.BR',
'GOV.BR',
'GRU.BR',
'IMB.BR',
'IND.BR',
'INF.BR',
'JAB.BR',
'JAMPA.BR',
'JDF.BR',
'JOINVILLE.BR',
'JOR.BR',
'JUS.BR',
'LEG.BR',
'LEL.BR',
'LOG.BR',
'LONDRINA.BR',
'MA.GOV.BR',
'MACAPA.BR',
'MACEIO.BR',
'MANAUS.BR',
'MARINGA.BR',
'MAT.BR',
'MED.BR',
'MG.GOV.BR',
'MIL.BR',
'MORENA.BR',
'MP.BR',
'MS.GOV.BR',
'MT.GOV.BR',
'MUS.BR',
'NATAL.BR',
'NET.BR',
'NITEROI.BR',
'NOM.BR',
'NOT.BR',
'NTR.BR',
'ODO.BR',
'ONG.BR',
'ORG.BR',
'OSASCO.BR',
'PA.GOV.BR',
'PALMAS.BR',
'PB.GOV.BR',
'PE.GOV.BR',
'PI.GOV.BR',
'POA.BR',
'PPG.BR',
'PR.GOV.BR',
'PRO.BR',
'PSC.BR',
'PSI.BR',
'PVH.BR',
'QSL.BR',
'RADIO.BR',
'REC.BR',
'RECIFE.BR',
'REP.BR',
'RIBEIRAO.BR',
'RIO.BR',
'RIOBRANCO.BR',
'RIOPRETO.BR',
'RJ.GOV.BR',
'RN.GOV.BR',
'RO.GOV.BR',
'RR.GOV.BR',
'RS.GOV.BR',
'SALVADOR.BR',
'SAMPA.BR',
'SANTAMARIA.BR',
'SANTOANDRE.BR',
'SAOBERNARDO.BR',
'SAOGONCA.BR',
'SC.GOV.BR',
'SE.GOV.BR',
'SEG.BR',
'SJC.BR',
'SLG.BR',
'SLZ.BR',
'SOROCABA.BR',
'SP.GOV.BR',
'SRV.BR',
'TAXI.BR',
'TC.BR',
'TEC.BR',
'TEO.BR',
'THE.BR',
'TMP.BR',
'TO.GOV.BR',
'TRD.BR',
'TUR.BR',
'TV.BR',
'UDI.BR',
'VET.BR',
'VIX.BR',
'VLOG.BR',
'WIKI.BR',
'ZLG.BR',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BS',
'EDU.BS',
'GOV.BS',
'NET.BS',
'ORG.BS',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BT',
'EDU.BT',
'GOV.BT',
'NET.BT',
'ORG.BT',
];
@@ -0,0 +1,7 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.BW',
'ORG.BW',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BY',
'GOV.BY',
'MIL.BY',
'OF.BY',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.BZ',
'EDU.BZ',
'GOV.BZ',
'NET.BZ',
'ORG.BZ',
];
@@ -0,0 +1,20 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AB.CA',
'BC.CA',
'GC.CA',
'MB.CA',
'NB.CA',
'NF.CA',
'NL.CA',
'NS.CA',
'NT.CA',
'NU.CA',
'ON.CA',
'PE.CA',
'QC.CA',
'SK.CA',
'YK.CA',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'GOV.CD',
];
@@ -0,0 +1,20 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.CI',
'ASSO.CI',
'CO.CI',
'COM.CI',
'ED.CI',
'EDU.CI',
'GO.CI',
'GOUV.CI',
'INT.CI',
'MD.CI',
'NET.CI',
'OR.CI',
'ORG.CI',
'PRESSE.CI',
'XN--AROPORT-BYA.CI',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'WWW.CK',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.CL',
'GOB.CL',
'GOV.CL',
'MIL.CL',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.CM',
'COM.CM',
'GOV.CM',
'NET.CM',
];
@@ -0,0 +1,49 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.CN',
'AH.CN',
'BJ.CN',
'COM.CN',
'CQ.CN',
'EDU.CN',
'FJ.CN',
'GD.CN',
'GOV.CN',
'GS.CN',
'GX.CN',
'GZ.CN',
'HA.CN',
'HB.CN',
'HE.CN',
'HI.CN',
'HK.CN',
'HL.CN',
'HN.CN',
'JL.CN',
'JS.CN',
'JX.CN',
'LN.CN',
'MIL.CN',
'MO.CN',
'NET.CN',
'NM.CN',
'NX.CN',
'ORG.CN',
'QH.CN',
'SC.CN',
'SD.CN',
'SH.CN',
'SN.CN',
'SX.CN',
'TJ.CN',
'TW.CN',
'XJ.CN',
'XN--55QX5D.CN',
'XN--IO0A7I.CN',
'XN--OD0ALG.CN',
'XZ.CN',
'YN.CN',
'ZJ.CN',
];
@@ -0,0 +1,18 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ARTS.CO',
'COM.CO',
'EDU.CO',
'FIRM.CO',
'GOV.CO',
'INFO.CO',
'INT.CO',
'MIL.CO',
'NET.CO',
'NOM.CO',
'ORG.CO',
'REC.CO',
'WEB.CO',
];
@@ -0,0 +1,12 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.CR',
'CO.CR',
'ED.CR',
'FI.CR',
'GO.CR',
'OR.CR',
'SA.CR',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.CU',
'EDU.CU',
'GOV.CU',
'INF.CU',
'NET.CU',
'ORG.CU',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.CV',
'EDU.CV',
'INT.CV',
'NOME.CV',
'ORG.CV',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.CW',
'EDU.CW',
'NET.CW',
'ORG.CW',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'GOV.CX',
];
@@ -0,0 +1,17 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.CY',
'BIZ.CY',
'COM.CY',
'EKLOGES.CY',
'GOV.CY',
'LTD.CY',
'MIL.CY',
'NET.CY',
'ORG.CY',
'PRESS.CY',
'PRO.CY',
'TM.CY',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.DM',
'EDU.DM',
'GOV.DM',
'NET.DM',
'ORG.DM',
];
@@ -0,0 +1,15 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ART.DO',
'COM.DO',
'EDU.DO',
'GOB.DO',
'GOV.DO',
'MIL.DO',
'NET.DO',
'ORG.DO',
'SLD.DO',
'WEB.DO',
];
@@ -0,0 +1,15 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ART.DZ',
'ASSO.DZ',
'COM.DZ',
'EDU.DZ',
'GOV.DZ',
'NET.DZ',
'ORG.DZ',
'POL.DZ',
'SOC.DZ',
'TM.DZ',
];
@@ -0,0 +1,17 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.EC',
'EDU.EC',
'FIN.EC',
'GOB.EC',
'GOV.EC',
'INFO.EC',
'K12.EC',
'MED.EC',
'MIL.EC',
'NET.EC',
'ORG.EC',
'PRO.EC',
];
@@ -0,0 +1,15 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AIP.EE',
'COM.EE',
'EDU.EE',
'FIE.EE',
'GOV.EE',
'LIB.EE',
'MED.EE',
'ORG.EE',
'PRI.EE',
'RIIK.EE',
];
@@ -0,0 +1,14 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.EG',
'EDU.EG',
'EUN.EG',
'GOV.EG',
'MIL.EG',
'NAME.EG',
'NET.EG',
'ORG.EG',
'SCI.EG',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.ES',
'EDU.ES',
'GOB.ES',
'NOM.ES',
'ORG.ES',
];
@@ -0,0 +1,13 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'BIZ.ET',
'COM.ET',
'EDU.ET',
'GOV.ET',
'INFO.ET',
'NAME.ET',
'NET.ET',
'ORG.ET',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ALAND.FI',
];
@@ -0,0 +1,15 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.FJ',
'BIZ.FJ',
'COM.FJ',
'GOV.FJ',
'INFO.FJ',
'MIL.FJ',
'NAME.FJ',
'NET.FJ',
'ORG.FJ',
'PRO.FJ',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.FM',
'EDU.FM',
'NET.FM',
'ORG.FM',
];
@@ -0,0 +1,26 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AEROPORT.FR',
'ASSO.FR',
'AVOCAT.FR',
'AVOUES.FR',
'CCI.FR',
'CHAMBAGRI.FR',
'CHIRURGIENS-DENTISTES.FR',
'COM.FR',
'EXPERTS-COMPTABLES.FR',
'GEOMETRE-EXPERT.FR',
'GOUV.FR',
'GRETA.FR',
'HUISSIER-JUSTICE.FR',
'MEDECIN.FR',
'NOM.FR',
'NOTAIRES.FR',
'PHARMACIEN.FR',
'PORT.FR',
'PRD.FR',
'TM.FR',
'VETERINAIRE.FR',
];
@@ -0,0 +1,7 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'EDU.GD',
'GOV.GD',
];
@@ -0,0 +1,12 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GE',
'EDU.GE',
'GOV.GE',
'MIL.GE',
'NET.GE',
'ORG.GE',
'PVT.GE',
];
@@ -0,0 +1,8 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.GG',
'NET.GG',
'ORG.GG',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GH',
'EDU.GH',
'GOV.GH',
'MIL.GH',
'ORG.GH',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GI',
'EDU.GI',
'GOV.GI',
'LTD.GI',
'MOD.GI',
'ORG.GI',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.GL',
'COM.GL',
'EDU.GL',
'NET.GL',
'ORG.GL',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.GN',
'COM.GN',
'EDU.GN',
'GOV.GN',
'NET.GN',
'ORG.GN',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ASSO.GP',
'COM.GP',
'EDU.GP',
'MOBI.GP',
'NET.GP',
'ORG.GP',
];
@@ -0,0 +1,10 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GR',
'EDU.GR',
'GOV.GR',
'NET.GR',
'ORG.GR',
];
@@ -0,0 +1,12 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GT',
'EDU.GT',
'GOB.GT',
'IND.GT',
'MIL.GT',
'NET.GT',
'ORG.GT',
];
@@ -0,0 +1,13 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.GU',
'EDU.GU',
'GOV.GU',
'GUAM.GU',
'INFO.GU',
'NET.GU',
'ORG.GU',
'WEB.GU',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.GY',
'COM.GY',
'EDU.GY',
'GOV.GY',
'NET.GY',
'ORG.GY',
];
@@ -0,0 +1,26 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.HK',
'EDU.HK',
'GOV.HK',
'IDV.HK',
'NET.HK',
'ORG.HK',
'XN--55QX5D.HK',
'XN--CIQPN.HK',
'XN--GMQ050I.HK',
'XN--GMQW5A.HK',
'XN--IO0A7I.HK',
'XN--LCVR32D.HK',
'XN--MK0AXI.HK',
'XN--MXTQ1M.HK',
'XN--OD0ALG.HK',
'XN--OD0AQ3B.HK',
'XN--TN0AG.HK',
'XN--UC0ATV.HK',
'XN--UC0AY4A.HK',
'XN--WCVS22D.HK',
'XN--ZF0AVX.HK',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.HN',
'EDU.HN',
'GOB.HN',
'MIL.HN',
'NET.HN',
'ORG.HN',
];
@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.HR',
'FROM.HR',
'IZ.HR',
'NAME.HR',
];
@@ -0,0 +1,22 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ADULT.HT',
'ART.HT',
'ASSO.HT',
'COM.HT',
'COOP.HT',
'EDU.HT',
'FIRM.HT',
'GOUV.HT',
'INFO.HT',
'MED.HT',
'NET.HT',
'ORG.HT',
'PERSO.HT',
'POL.HT',
'PRO.HT',
'REL.HT',
'SHOP.HT',
];
@@ -0,0 +1,36 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'2000.HU',
'AGRAR.HU',
'BOLT.HU',
'CASINO.HU',
'CITY.HU',
'CO.HU',
'EROTICA.HU',
'EROTIKA.HU',
'FILM.HU',
'FORUM.HU',
'GAMES.HU',
'HOTEL.HU',
'INFO.HU',
'INGATLAN.HU',
'JOGASZ.HU',
'KONYVELO.HU',
'LAKAS.HU',
'MEDIA.HU',
'NEWS.HU',
'ORG.HU',
'PRIV.HU',
'REKLAM.HU',
'SEX.HU',
'SHOP.HU',
'SPORT.HU',
'SULI.HU',
'SZEX.HU',
'TM.HU',
'TOZSDE.HU',
'UTAZAS.HU',
'VIDEO.HU',
];
@@ -0,0 +1,17 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.ID',
'BIZ.ID',
'CO.ID',
'DESA.ID',
'GO.ID',
'MIL.ID',
'MY.ID',
'NET.ID',
'OR.ID',
'PONPES.ID',
'SCH.ID',
'WEB.ID',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'GOV.IE',
];
@@ -0,0 +1,13 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.IL',
'CO.IL',
'GOV.IL',
'IDF.IL',
'K12.IL',
'MUNI.IL',
'NET.IL',
'ORG.IL',
];
@@ -0,0 +1,14 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.IM',
'CO.IM',
'COM.IM',
'LTD.CO.IM',
'NET.IM',
'ORG.IM',
'PLC.CO.IM',
'TT.IM',
'TV.IM',
];
@@ -0,0 +1,46 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'5G.IN',
'6G.IN',
'AC.IN',
'AI.IN',
'AM.IN',
'BIHAR.IN',
'BIZ.IN',
'BUSINESS.IN',
'CA.IN',
'CN.IN',
'CO.IN',
'COM.IN',
'COOP.IN',
'CS.IN',
'DELHI.IN',
'DR.IN',
'EDU.IN',
'ER.IN',
'FIRM.IN',
'GEN.IN',
'GOV.IN',
'GUJARAT.IN',
'IND.IN',
'INFO.IN',
'INT.IN',
'INTERNET.IN',
'IO.IN',
'ME.IN',
'MIL.IN',
'NET.IN',
'NIC.IN',
'ORG.IN',
'PG.IN',
'POST.IN',
'PRO.IN',
'RES.IN',
'TRAVEL.IN',
'TV.IN',
'UK.IN',
'UP.IN',
'US.IN',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'EU.INT',
];
@@ -0,0 +1,6 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.IO',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.IQ',
'EDU.IQ',
'GOV.IQ',
'MIL.IQ',
'NET.IQ',
'ORG.IQ',
];
@@ -0,0 +1,14 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'AC.IR',
'CO.IR',
'GOV.IR',
'ID.IR',
'NET.IR',
'ORG.IR',
'SCH.IR',
'XN--MGBA3A4F16A.IR',
'XN--MGBA3A4FRA.IR',
];
@@ -0,0 +1,11 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.IS',
'EDU.IS',
'GOV.IS',
'INT.IS',
'NET.IS',
'ORG.IS',
];
@@ -0,0 +1,411 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'ABR.IT',
'ABRUZZO.IT',
'AG.IT',
'AGRIGENTO.IT',
'AL.IT',
'ALESSANDRIA.IT',
'ALTO-ADIGE.IT',
'ALTOADIGE.IT',
'AN.IT',
'ANCONA.IT',
'ANDRIA-BARLETTA-TRANI.IT',
'ANDRIA-TRANI-BARLETTA.IT',
'ANDRIABARLETTATRANI.IT',
'ANDRIATRANIBARLETTA.IT',
'AO.IT',
'AOSTA-VALLEY.IT',
'AOSTA.IT',
'AOSTAVALLEY.IT',
'AOSTE.IT',
'AP.IT',
'AQ.IT',
'AQUILA.IT',
'AR.IT',
'AREZZO.IT',
'ASCOLI-PICENO.IT',
'ASCOLIPICENO.IT',
'ASTI.IT',
'AT.IT',
'AV.IT',
'AVELLINO.IT',
'BA.IT',
'BALSAN-SUDTIROL.IT',
'BALSAN-SUEDTIROL.IT',
'BALSAN.IT',
'BARI.IT',
'BARLETTA-TRANI-ANDRIA.IT',
'BARLETTATRANIANDRIA.IT',
'BAS.IT',
'BASILICATA.IT',
'BELLUNO.IT',
'BENEVENTO.IT',
'BERGAMO.IT',
'BG.IT',
'BI.IT',
'BIELLA.IT',
'BL.IT',
'BN.IT',
'BO.IT',
'BOLOGNA.IT',
'BOLZANO-ALTOADIGE.IT',
'BOLZANO.IT',
'BOZEN-SUDTIROL.IT',
'BOZEN-SUEDTIROL.IT',
'BOZEN.IT',
'BR.IT',
'BRESCIA.IT',
'BRINDISI.IT',
'BS.IT',
'BT.IT',
'BULSAN-SUDTIROL.IT',
'BULSAN-SUEDTIROL.IT',
'BULSAN.IT',
'BZ.IT',
'CA.IT',
'CAGLIARI.IT',
'CAL.IT',
'CALABRIA.IT',
'CALTANISSETTA.IT',
'CAM.IT',
'CAMPANIA.IT',
'CAMPIDANO-MEDIO.IT',
'CAMPIDANOMEDIO.IT',
'CAMPOBASSO.IT',
'CARBONIA-IGLESIAS.IT',
'CARBONIAIGLESIAS.IT',
'CARRARA-MASSA.IT',
'CARRARAMASSA.IT',
'CASERTA.IT',
'CATANIA.IT',
'CATANZARO.IT',
'CB.IT',
'CE.IT',
'CESENA-FORLI.IT',
'CESENAFORLI.IT',
'CH.IT',
'CHIETI.IT',
'CI.IT',
'CL.IT',
'CN.IT',
'CO.IT',
'COMO.IT',
'COSENZA.IT',
'CR.IT',
'CREMONA.IT',
'CROTONE.IT',
'CS.IT',
'CT.IT',
'CUNEO.IT',
'CZ.IT',
'DELL-OGLIASTRA.IT',
'DELLOGLIASTRA.IT',
'EDU.IT',
'EMILIA-ROMAGNA.IT',
'EMILIAROMAGNA.IT',
'EMR.IT',
'EN.IT',
'ENNA.IT',
'FC.IT',
'FE.IT',
'FERMO.IT',
'FERRARA.IT',
'FG.IT',
'FI.IT',
'FIRENZE.IT',
'FLORENCE.IT',
'FM.IT',
'FOGGIA.IT',
'FORLI-CESENA.IT',
'FORLICESENA.IT',
'FR.IT',
'FRIULI-V-GIULIA.IT',
'FRIULI-VE-GIULIA.IT',
'FRIULI-VEGIULIA.IT',
'FRIULI-VENEZIA-GIULIA.IT',
'FRIULI-VENEZIAGIULIA.IT',
'FRIULI-VGIULIA.IT',
'FRIULIV-GIULIA.IT',
'FRIULIVE-GIULIA.IT',
'FRIULIVEGIULIA.IT',
'FRIULIVENEZIA-GIULIA.IT',
'FRIULIVENEZIAGIULIA.IT',
'FRIULIVGIULIA.IT',
'FROSINONE.IT',
'FVG.IT',
'GE.IT',
'GENOA.IT',
'GENOVA.IT',
'GO.IT',
'GORIZIA.IT',
'GOV.IT',
'GR.IT',
'GROSSETO.IT',
'IGLESIAS-CARBONIA.IT',
'IGLESIASCARBONIA.IT',
'IM.IT',
'IMPERIA.IT',
'IS.IT',
'ISERNIA.IT',
'KR.IT',
'LA-SPEZIA.IT',
'LAQUILA.IT',
'LASPEZIA.IT',
'LATINA.IT',
'LAZ.IT',
'LAZIO.IT',
'LC.IT',
'LE.IT',
'LECCE.IT',
'LECCO.IT',
'LI.IT',
'LIG.IT',
'LIGURIA.IT',
'LIVORNO.IT',
'LO.IT',
'LODI.IT',
'LOM.IT',
'LOMBARDIA.IT',
'LOMBARDY.IT',
'LT.IT',
'LU.IT',
'LUCANIA.IT',
'LUCCA.IT',
'MACERATA.IT',
'MANTOVA.IT',
'MAR.IT',
'MARCHE.IT',
'MASSA-CARRARA.IT',
'MASSACARRARA.IT',
'MATERA.IT',
'MB.IT',
'MC.IT',
'ME.IT',
'MEDIO-CAMPIDANO.IT',
'MEDIOCAMPIDANO.IT',
'MESSINA.IT',
'MI.IT',
'MILAN.IT',
'MILANO.IT',
'MN.IT',
'MO.IT',
'MODENA.IT',
'MOL.IT',
'MOLISE.IT',
'MONZA-BRIANZA.IT',
'MONZA-E-DELLA-BRIANZA.IT',
'MONZA.IT',
'MONZABRIANZA.IT',
'MONZAEBRIANZA.IT',
'MONZAEDELLABRIANZA.IT',
'MS.IT',
'MT.IT',
'NA.IT',
'NAPLES.IT',
'NAPOLI.IT',
'NO.IT',
'NOVARA.IT',
'NU.IT',
'NUORO.IT',
'OG.IT',
'OGLIASTRA.IT',
'OLBIA-TEMPIO.IT',
'OLBIATEMPIO.IT',
'OR.IT',
'ORISTANO.IT',
'OT.IT',
'PA.IT',
'PADOVA.IT',
'PADUA.IT',
'PALERMO.IT',
'PARMA.IT',
'PAVIA.IT',
'PC.IT',
'PD.IT',
'PE.IT',
'PERUGIA.IT',
'PESARO-URBINO.IT',
'PESAROURBINO.IT',
'PESCARA.IT',
'PG.IT',
'PI.IT',
'PIACENZA.IT',
'PIEDMONT.IT',
'PIEMONTE.IT',
'PISA.IT',
'PISTOIA.IT',
'PMN.IT',
'PN.IT',
'PO.IT',
'PORDENONE.IT',
'POTENZA.IT',
'PR.IT',
'PRATO.IT',
'PT.IT',
'PU.IT',
'PUG.IT',
'PUGLIA.IT',
'PV.IT',
'PZ.IT',
'RA.IT',
'RAGUSA.IT',
'RAVENNA.IT',
'RC.IT',
'RE.IT',
'REGGIO-CALABRIA.IT',
'REGGIO-EMILIA.IT',
'REGGIOCALABRIA.IT',
'REGGIOEMILIA.IT',
'RG.IT',
'RI.IT',
'RIETI.IT',
'RIMINI.IT',
'RM.IT',
'RN.IT',
'RO.IT',
'ROMA.IT',
'ROME.IT',
'ROVIGO.IT',
'SA.IT',
'SALERNO.IT',
'SAR.IT',
'SARDEGNA.IT',
'SARDINIA.IT',
'SASSARI.IT',
'SAVONA.IT',
'SI.IT',
'SIC.IT',
'SICILIA.IT',
'SICILY.IT',
'SIENA.IT',
'SIRACUSA.IT',
'SO.IT',
'SONDRIO.IT',
'SP.IT',
'SR.IT',
'SS.IT',
'SUEDTIROL.IT',
'SV.IT',
'TA.IT',
'TAA.IT',
'TARANTO.IT',
'TE.IT',
'TEMPIO-OLBIA.IT',
'TEMPIOOLBIA.IT',
'TERAMO.IT',
'TERNI.IT',
'TN.IT',
'TO.IT',
'TORINO.IT',
'TOS.IT',
'TOSCANA.IT',
'TP.IT',
'TR.IT',
'TRANI-ANDRIA-BARLETTA.IT',
'TRANI-BARLETTA-ANDRIA.IT',
'TRANIANDRIABARLETTA.IT',
'TRANIBARLETTAANDRIA.IT',
'TRAPANI.IT',
'TRENTIN-SUD-TIROL.IT',
'TRENTIN-SUDTIROL.IT',
'TRENTIN-SUED-TIROL.IT',
'TRENTIN-SUEDTIROL.IT',
'TRENTINO-A-ADIGE.IT',
'TRENTINO-AADIGE.IT',
'TRENTINO-ALTO-ADIGE.IT',
'TRENTINO-ALTOADIGE.IT',
'TRENTINO-S-TIROL.IT',
'TRENTINO-STIROL.IT',
'TRENTINO-SUD-TIROL.IT',
'TRENTINO-SUDTIROL.IT',
'TRENTINO-SUED-TIROL.IT',
'TRENTINO-SUEDTIROL.IT',
'TRENTINO.IT',
'TRENTINOA-ADIGE.IT',
'TRENTINOAADIGE.IT',
'TRENTINOALTO-ADIGE.IT',
'TRENTINOALTOADIGE.IT',
'TRENTINOS-TIROL.IT',
'TRENTINOSTIROL.IT',
'TRENTINOSUD-TIROL.IT',
'TRENTINOSUDTIROL.IT',
'TRENTINOSUED-TIROL.IT',
'TRENTINOSUEDTIROL.IT',
'TRENTINSUD-TIROL.IT',
'TRENTINSUDTIROL.IT',
'TRENTINSUED-TIROL.IT',
'TRENTINSUEDTIROL.IT',
'TRENTO.IT',
'TREVISO.IT',
'TRIESTE.IT',
'TS.IT',
'TURIN.IT',
'TUSCANY.IT',
'TV.IT',
'UD.IT',
'UDINE.IT',
'UMB.IT',
'UMBRIA.IT',
'URBINO-PESARO.IT',
'URBINOPESARO.IT',
'VA.IT',
'VAL-D-AOSTA.IT',
'VAL-DAOSTA.IT',
'VALD-AOSTA.IT',
'VALDAOSTA.IT',
'VALLE-AOSTA.IT',
'VALLE-D-AOSTA.IT',
'VALLE-DAOSTA.IT',
'VALLEAOSTA.IT',
'VALLED-AOSTA.IT',
'VALLEDAOSTA.IT',
'VALLEE-AOSTE.IT',
'VALLEE-D-AOSTE.IT',
'VALLEEAOSTE.IT',
'VALLEEDAOSTE.IT',
'VAO.IT',
'VARESE.IT',
'VB.IT',
'VC.IT',
'VDA.IT',
'VE.IT',
'VEN.IT',
'VENETO.IT',
'VENEZIA.IT',
'VENICE.IT',
'VERBANIA.IT',
'VERCELLI.IT',
'VERONA.IT',
'VI.IT',
'VIBO-VALENTIA.IT',
'VIBOVALENTIA.IT',
'VICENZA.IT',
'VITERBO.IT',
'VR.IT',
'VS.IT',
'VT.IT',
'VV.IT',
'XN--BALSAN-SDTIROL-NSB.IT',
'XN--BOZEN-SDTIROL-2OB.IT',
'XN--BULSAN-SDTIROL-NSB.IT',
'XN--CESENA-FORL-MCB.IT',
'XN--CESENAFORL-I8A.IT',
'XN--FORL-CESENA-FCB.IT',
'XN--FORLCESENA-C8A.IT',
'XN--SDTIROL-N2A.IT',
'XN--TRENTIN-SD-TIROL-RZB.IT',
'XN--TRENTIN-SDTIROL-7VB.IT',
'XN--TRENTINO-SD-TIROL-C3B.IT',
'XN--TRENTINO-SDTIROL-SZB.IT',
'XN--TRENTINOSD-TIROL-RZB.IT',
'XN--TRENTINOSDTIROL-7VB.IT',
'XN--TRENTINSD-TIROL-6VB.IT',
'XN--TRENTINSDTIROL-NSB.IT',
'XN--VALLE-AOSTE-EBB.IT',
'XN--VALLE-D-AOSTE-EHB.IT',
'XN--VALLEAOSTE-E7A.IT',
'XN--VALLEDAOSTE-EBB.IT',
];
@@ -0,0 +1,8 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'CO.JE',
'NET.JE',
'ORG.JE',
];
@@ -0,0 +1,13 @@
<?php declare(strict_types=1);
// Copyright (c) https://publicsuffix.org
// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
return [
'COM.JO',
'EDU.JO',
'GOV.JO',
'MIL.JO',
'NAME.JO',
'NET.JO',
'ORG.JO',
'SCH.JO',
];

Some files were not shown because too many files have changed in this diff Show More