prinsfrank / standards
一组PHP枚举标准:ISO3166,ISO4217,ISO639...
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-intl: *
- ext-mbstring: *
- prinsfrank/enums: ^1.2
Requires (Dev)
- ext-dom: *
- composer/composer: ^2.3
- dbrekelmans/bdi: ^1.0
- friendsofphp/php-cs-fixer: ^3.8
- phpstan/phpstan: ^1.11.9
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^11.2.6
- prinsfrank/transliteration: ^1.0
- symfony/panther: dev-main
- v4.x-dev
- dev-main / 3.x-dev
- v3.10.1
- v3.10.0
- v3.9.0
- v3.8.8
- v3.8.7
- v3.8.6
- v3.8.5
- v3.8.4
- v3.8.3
- v3.8.2
- v3.8.1
- v3.8.0
- v3.7.0
- v3.6.0
- v3.5.0
- v3.4.0
- v3.3.0
- v3.2.0
- v3.1.0
- v3.0.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.1
- v2.0.0
- v1.6.0
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.0
- v0.0.1
- dev-update-spec/language
- dev-test-force-overwrite-action
- dev-add-strict-rules-phpstan
This package is auto-updated.
Last update: 2024-09-22 17:59:09 UTC
README
标准
一组PHP枚举标准
每日从其来源更新,无论是ISO或IANA直接,还是SIX集团或美国国会图书馆等维护机构。
设置
注意 确保您正在运行PHP 8.1或更高版本以使用此包
要立即开始,请在您的composer项目中运行以下命令;
composer require prinsfrank/standards
或者仅用于开发;
composer require prinsfrank/standards --dev
每日从其来源更新
此包的工作原理
此包实现了许多规范作为PHP枚举,因此您可以在方法中为它们提供类型提示。目前,所有规范都作为后备枚举实现。这意味着除了名称外,它们还有一个内部的'value',可以是整数或字符串。
在国家、货币和语言规范中,不同枚举之间存在关系。例如,Alpha2国家代码'NL'与Alpha3 'NLD'、数值'528'和名称'Netherlands (the)'相关。内部,这些规范依赖于这些值的键是相同的,因此可以在这之间进行转换。
实体及其关系
此包中的所有规范都紧密相关,除了HTTP状态码和方法。不过,并非所有关系都是双向的。例如,语言标签由语言和可选的国家组成,但仅国家不能转换为语言标签。
下面您可以找到所有规范之间的关系概述。
升级
此包遵循semver。这意味着在次要版本之间(例如从1.1到1.2)没有破坏性更改,但破坏性更改作为主要版本发布(例如从1.x到2.x)。有关从一个主要版本升级到下一个主要版本的说明,请参阅此项目根目录中的UPGRADING.md文件。
一些强大的用例
国家(ISO3166-1)
🎓 Alpha2/3国家代码始终是大写,以避免与语言代码混淆。建议在API中公开规范时使用Alpha2/Alpha3代码
概述
所有Alpha2、Alpha3、数值和名称值都有对应的其他国家枚举中的枚举。可以使用对应的方法(toAlpha2、toAlpha3等)进行转换。
可以通过调用isMemberOf
方法来检查国家分组成员资格,提供实现GroupInterface
的类的FQN。有几种国家分组可用:金砖国家、欧盟、欧洲自由贸易联盟等。国家还可以有子分区,可以是多种类型:国家、省份等。
CountryAlpha2::from('NL'); // CountryAlpha2::Netherlands CountryNumeric::from('528'); // CountryNumeric::Netherlands CountryNumeric::fromInt(528); // CountryNumeric::Netherlands CountryAlpha3::from('NLD'); // CountryAlpha3::Netherlands CountryAlpha3::from('NLD')->value; // 'NLD' CountryAlpha3::from('NLD')->name; // 'Netherlands' CountryAlpha3::from('NLD')->toCountryAlpha2()->value; // 'NL' CountryAlpha3::from('NLD')->toCountryNumeric()->value; // '528' CountryAlpha3::from('NLD')->toCountryNumeric()->valueAsInt(); // 528 CountryAlpha3::from('NLD')->isMemberOf(EU::class); // true CountryAlpha2::Netherlands; // CountryAlpha2::Netherlands CountryAlpha2::Vanuatu->getSubdivisions(); // [CountrySubdivision::Vanuatu_province_Malampa, CountrySubdivision::Vanuatu_province_Penama, CountrySubdivision::Vanuatu_province_Sanma, CountrySubdivision::Vanuatu_province_Shefa, CountrySubdivision::Vanuatu_province_Tafea, CountrySubdivision::Vanuatu_province_Torba] CountryAlpha2::Aruba->getParentCountry(); // CountryAlpha2::Netherlands CountryAlpha2::Netherlands->getSubCountries(); // [CountryAlpha2::Aruba, CountryAlpha2::Curacao, CountryAlpha2::Sint_Maarten_Dutch_part, CountryAlpha2::Bonaire_Sint_Eustatius_and_Saba] CountryAlpha3::from('NLD')->getCountryCallingCodes(); // [CountryCallingCode::Netherlands_Kingdom_of_the] CountryAlpha3::from('NLD')->getCountryCallingCodes()[0]->value; // 31 CountryAlpha3::from('NLD')->getInternationalCallPrefix(); // InternationalCallPrefix::_00 CountryAlpha3::from('NLD')->getInternationalCallPrefix()->value; // '00' CountryAlpha3::from('NLD')->getNationalCallPrefix(); // NationalCallPrefix::_0 CountryAlpha3::from('NLD')->getNationalCallPrefix()->value; // '0' CountryAlpha3::from('NLD')->getFlagEmoji(); // '🇳🇱' (This might not be displayed correctly in this readme if you're on windows, see 'https://prinsfrank.nl/2021/01/25/Non-existing-flag-emojis-on-windows to make these flag emojis visible for Windows users.') CountryAlpha3::from('NLD')->getCurrenciesAlpha3(); // [CurrencyAlpha3::Euro] CountryAlpha3::from('NLD')->getOfficialAndDeFactoLanguages(); // [LanguageAlpha2::Dutch_Flemish] CountryAlpha3::from('NLD')->getNameInLanguage(LanguageAlpha2::Dutch_Flemish): // 'Nederland' CountryAlpha3::from('NLD')->getNameInLanguage(LanguageAlpha2::English): // 'Netherlands' CountryAlpha3::from('NLD')->formatNumber(42.42, LanguageAlpha2::Dutch_Flemish); // '42,42' public function foo(CountryAlpha2 $countryAlpha2) {} // Use spec as typehint to enforce valid value
完整文档
CountryAlpha2
$valueAlpha2 = CountryAlpha2::from('NL'); // CountryAlpha2::Netherlands $value = $valueAlpha2->value; // 'NL' $lowerCaseValue = $valueAlpha2->lowerCaseValue(); // 'nl' $valueName = $valueAlpha2->name; // 'Netherlands' $valueAlpha3 = $valueAlpha2->toCountryAlpha3(); // CountryAlpha3::Netherlands $valueNumeric = $valueAlpha2->toCountryNumeric(); // CountryNumeric::Netherlands $isMemberOfEu = $valueAlpha2->isMemberOf(EU::class); // true $isMemberOfBrics = $valueAlpha2->isMemberOf(Brics::class); // false $valueAlpha2->getCountryCallingCodes(); // [CountryCallingCode::Netherlands_Kingdom_of_the] $valueAlpha2->getCountryCallingCodes()[0]->value; // 31 $valueAlpha2->getInternationalCallPrefix(); // InternationalCallPrefix::_00 $valueAlpha2->getInternationalCallPrefix()->value; // '00' $valueAlpha2->getNationalCallPrefix(); // NationalCallPrefix::_0 $valueAlpha2->getNationalCallPrefix()->value; // '0' $valueAlpha2::from('NL')->getFlagEmoji(); // '🇳🇱' (This might not be displayed correctly in this readme if you're on windows, see 'https://prinsfrank.nl/2021/01/25/Non-existing-flag-emojis-on-windows to make these flag emojis visible for Windows users.') $valueAlpha2->getCurrenciesAlpha3(); // [CurrencyAlpha3::Euro] $valueAlpha2->getOfficialAndDeFactoLanguages(); // [LanguageAlpha2::Dutch_Flemish] $valueAlpha2->getNameInLanguage(LanguageAlpha2::Dutch_Flemish): // 'Nederland' $valueAlpha2->getNameInLanguage(LanguageAlpha2::English): // 'Netherlands' $valueAlpha2->formatNumber(42.42, LanguageAlpha2::Dutch_Flemish); // '42,42'
CountryAlpha3
$valueAlpha3 = CountryAlpha3::from('NLD'); // CountryAlpha3::Netherlands $value = $valueAlpha3->value; // 'NLD' $valueName = $valueAlpha3->name; // 'Netherlands' $valueAlpha2 = $valueAlpha3->toCountryAlpha2(); // CountryAlpha2::Netherlands $valueNumeric = $valueAlpha3->toCountryNumeric(); // CountryNumeric::Netherlands $isMemberOfEu = $valueAlpha3->isMemberOf(EU::class); // true $isMemberOfBrics = $valueAlpha3->isMemberOf(Brics::class); // false $valueAlpha3->getCountryCallingCodes(); // [CountryCallingCode::Netherlands_Kingdom_of_the] $valueAlpha3->getCountryCallingCodes()[0]->value; // 31 $valueAlpha3->getInternationalCallPrefix(); // InternationalCallPrefix::_00 $valueAlpha3->getInternationalCallPrefix()->value; // '00' $valueAlpha3->getNationalCallPrefix(); // NationalCallPrefix::_0 $valueAlpha3->getNationalCallPrefix()->value; // '0' $valueAlpha3->getFlagEmoji(); // '🇳🇱' (This might not be displayed correctly in this readme if you're on windows, see 'https://prinsfrank.nl/2021/01/25/Non-existing-flag-emojis-on-windows to make these flag emojis visible for Windows users.') $valueAlpha3->getCurrenciesAlpha3(); // [CurrencyAlpha3::Euro] $valueAlpha3->getOfficialAndDeFactoLanguages(); // [LanguageAlpha2::Dutch_Flemish] $valueAlpha3->getNameInLanguage(LanguageAlpha2::Dutch_Flemish): // 'Nederland' $valueAlpha3->getNameInLanguage(LanguageAlpha2::English): // 'Netherlands' $valueAlpha2->formatNumber(42.42, LanguageAlpha2::Dutch_Flemish); // '42,42'
CountryNumeric
$valueNumeric = CountryNumeric::from('528'); // CountryNumeric::Netherlands $valueNumeric = CountryNumeric::fromInt(528); // CountryNumeric::Netherlands $value = $valueNumeric->value; // '528' $valueName = $valueNumeric->name; // 'Netherlands' $valueAlpha2 = $valueNumeric->toCountryAlpha2(); // CountryAlpha2::Netherlands $valueAlpha3 = $valueNumeric->toCountryAlpha3(); // CountryAlpha3::Netherlands $isMemberOfEu = $valueNumeric->isMemberOf(EU::class); // true $isMemberOfBrics = $valueNumeric->isMemberOf(Brics::class); // false $valueNumeric->getCountryCallingCodes(); // [CountryCallingCode::Netherlands_Kingdom_of_the] $valueNumeric->getCountryCallingCodes()[0]->value; // 31 $valueNumeric->getInternationalCallPrefix(); // InternationalCallPrefix::_00 $valueNumeric->getInternationalCallPrefix()->value; // '00' $valueNumeric->getNationalCallPrefix(); // NationalCallPrefix::_0 $valueNumeric->getNationalCallPrefix()->value; // '0' $valueNumeric->getFlagEmoji(); // '🇳🇱' (This might not be displayed correctly in this readme if you're on windows, see 'https://prinsfrank.nl/2021/01/25/Non-existing-flag-emojis-on-windows to make these flag emojis visible for Windows users.') $valueNumeric->getCurrenciesAlpha3(); // [CurrencyAlpha3::Euro] $valueNumeric->getOfficialAndDeFactoLanguages(); // [LanguageAlpha2::Dutch_Flemish] $valueNumeric->getNameInLanguage(LanguageAlpha2::Dutch_Flemish): // 'Nederland' $valueNumeric->getNameInLanguage(LanguageAlpha2::English): // 'Netherlands' $valueAlpha2->formatNumber(42.42, LanguageAlpha2::Dutch_Flemish); // '42,42'
CountrySubdivision
$subdivision = CountrySubdivision::from('VU-MAP'); // CountrySubdivision::Vanuatu_province_Malampa $subdivision = CountrySubdivision::Vanuatu_province_Malampa; // CountrySubdivision::Vanuatu_province_Malampa $subdivision->getPartOfCountry(); // CountryAlpha2::Vanuatu $subdivision->getNames(); // [new ('Malampa', [LanguageAlpha2::French, LanguageAlpha2::English], null, null)] $subdivision->getSameAsCountry(); // null
(已弃用)
$valueName = CountryName::from('Netherlands (Kingdom of the)'); // CountryName::Netherlands $value = $valueName->value; // 'Netherlands (Kingdom of the)' $valueName = $valueName->name; // 'Netherlands' $valueAlpha2 = $valueName->toCountryAlpha2(); // CountryAlpha2::Netherlands $valueAlpha3 = $valueName->toCountryAlpha3(); // CountryAlpha3::Netherlands $valueNumeric = $valueName->toCountryNumeric(); // CountryNumeric::Netherlands $isMemberOfEu = $valueName->isMemberOf(EU::class); // true $isMemberOfBrics = $valueName->isMemberOf(Brics::class); // false $valueName->getCountryCallingCodes(); // [CountryCallingCode::Netherlands_Kingdom_of_the] $valueName->getCountryCallingCodes()[0]->value; // 31 $valueName->getInternationalCallPrefix(); // InternationalCallPrefix::_00 $valueName->getInternationalCallPrefix()->value; // '00' $valueName->getNationalCallPrefix(); // NationalCallPrefix::_0 $valueName->getNationalCallPrefix()->value; // '0' $valueName->getFlagEmoji(); // '🇳🇱' (This might not be displayed correctly in this readme if you're on windows, see 'https://prinsfrank.nl/2021/01/25/Non-existing-flag-emojis-on-windows to make these flag emojis visible for Windows users.') $valueName->getCurrenciesAlpha3(); // [CurrencyAlpha3::Euro] $valueName->getOfficialAndDeFactoLanguages(); // [LanguageAlpha2::Dutch_Flemish]
国家电话区号(ITU-T E.164)
🎓 国家电话区号可以是1到3位数字,可以跨越多个国家。本规范中没有前导零。
概述
国家电话区号相当直接。一个国家可以有多个国家电话区号,一个国家电话区号也可以跨越多个国家。这就是为什么forCountry
和getCountriesAlpha2
都返回一个国家电话区号/国家的数组,而不是单个项目。
CountryCallingCode::from(1); // CountryCallingCode::Integrated_numbering_plan CountryCallingCode::from(31); // CountryCallingCode::Netherlands_Kingdom_of_the CountryCallingCode::from(31)->value; // 31 CountryCallingCode::from(31)->name; // 'Netherlands_Kingdom_of_the' CountryCallingCode::Netherlands_Kingdom_of_the; // CountryCallingCode::Netherlands_Kingdom_of_the CountryCallingCode::from(31)->getCountriesAlpha2(); // [CountryAlpha2::Netherlands] CountryCallingCode::from(7)->getCountriesAlpha2(); // [CountryAlpha2::Kazakhstan, CountryAlpha2::Russian_Federation] CountryCallingCode::forCountry(CountryAlpha2::Netherlands); // [CountryCallingCode::Netherlands_Kingdom_of_the] public function foo(CountryCallingCode $countryCallingCode) {} // Use spec as typehint to enforce valid value
货币(ISO4217)
🎓 Alpha3代码为大写。在通信或存储货币时,建议使用Alpha3或数字表示。
概述
所有Alpha3、数字和名称值都有其他货币枚举中的相应枚举。可以使用它们对应的方法(toCurrencyAlpha3等)进行转换。还有一个可用的枚举,将所有货币映射到货币符号,可以通过调用'getSymbol'方法来访问。
CurrencyAlpha3::from('EUR'); // CurrencyAlpha3::Euro CurrencyAlpha3::from('EUR')->value; // 'EUR' CurrencyAlpha3::from('EUR')->lowercaseValue(); // 'eur' CurrencyAlpha3::from('EUR')->toCurrencyName()->value; // 'Euro' CurrencyAlpha3::from('EUR')->getSymbol(); // CurrencySymbol::Euro CurrencyAlpha3::from('EUR')->getSymbol()->value; // '€' CurrencyAlpha3::from('EUR')->toCurrencyNumeric()->value; // '978' CurrencyAlpha3::from('EUR')->getMinorUnits(); // 2 CurrencyNumeric::from('978'); // CurrencyNumeric::Euro CurrencyNumeric::fromInt(978); // CurrencyNumeric::Euro CurrencyNumeric::from('978')->value; // '978' CurrencyNumeric::from('978')->valueAsInt(); // 978 CurrencySymbol::from('€'); // CurrencySymbol::Euro CurrencySymbol::from('€')->value; // '€' CurrencySymbol::forCurrency(CurrencyAlpha3::Euro); // CurrencySymbol::Euro CurrencySymbol::forCurrency(CurrencyNumeric::Euro); // CurrencySymbol::Euro CurrencySymbol::forCurrency(CurrencyName::Euro); // CurrencySymbol::Euro CurrencySymbol::forCurrency(CurrencyNumeric::from('978')); // CurrencySymbol::Euro CurrencyAlpha3::Euro; // CurrencyAlpha3::Euro CurrencyAlpha3::Euro->format(42.42, CountryAlpha2::Netherlands); // '€ 42,42' CurrencyAlpha3::Euro->format(42.42, CountryAlpha2::Netherlands, LanguageAlpha2::Dutch_Flemish); // '€ 42,42' CurrencyAlpha3::Norwegian_Krone->getCountriesAlpha2(); // [CountryAlpha2::Bouvet_Island, CountryAlpha2::Norway, CountryAlpha2::Svalbard_Jan_Mayen] public function foo(CurrencyAlpha3 $currencyAlpha3) {} // Use spec as typehint to enforce valid value
完整文档
CurrencyAlpha3
$currencyAlpha3 = CurrencyAlpha3::from('EUR'); // CurrencyAlpha3::Euro $value = $currencyAlpha3->value; // 'EUR' $value = $currencyAlpha3->lowercaseValue(); // 'eur' $valueName = $currencyAlpha3->name; // 'Euro' $minorUnits = $currencyAlpha3->getMinorUnits(); // 2 $valueNumeric = $currencyAlpha3->toCurrencyNumeric(); // CurrencyNumeric::Euro $valueName = $currencyAlpha3->toCurrencyName(); // CurrencyName::Euro $valueName = $currencyAlpha3->toCurrencyName()->value; // 'Euro' $valueSymbol = $currencyAlpha3->getSymbol(); // CurrencySymbol::Euro $valueSymbol = $currencyAlpha3->getSymbol()->value; // '€' $countries = $currencyAlpha2->getCountriesAlpha2(); // [CountryAlpha2::Bouvet_Island, CountryAlpha2::Norway, CountryAlpha2::Svalbard_Jan_Mayen] $currencyAlpha3->format(42.42, CountryAlpha2::Netherlands); // '€ 42,42' $currencyAlpha3->format(42.42, CountryAlpha2::Netherlands, LanguageAlpha2::Dutch_Flemish); // '€ 42,42'
CurrencyNumeric
$currencyNumeric = CurrencyNumeric::from('978'); // CurrencyNumeric::Euro $currencyNumeric = CurrencyNumeric::fromInt(978); // CurrencyNumeric::Euro $value = $currencyNumeric->value; // '978' $value = $currencyNumeric->valueAsInt(); // 978 $valueName = $currencyNumeric->name; // 'Euro' $minorUnits = $currencyNumeric->getMinorUnits(); // 2 $valueAlpha3 = $currencyNumeric->toCurrencyAlpha3(); // CurrencyAlpha3::Euro $valueName = $currencyNumeric->toCurrencyName(); // CurrencyName::Euro $valueName = $currencyNumeric->toCurrencyName()->value; // 'Euro' $valueSymbol = $currencyNumeric->getSymbol(); // CurrencySymbol::Euro $valueSymbol = $currencyNumeric->getSymbol()->value; // '€' $countries = $currencyNumeric->getCountriesAlpha2(); // [CountryAlpha2::Bouvet_Island, CountryAlpha2::Norway, CountryAlpha2::Svalbard_Jan_Mayen] $currencyNumeric->format(42.42, CountryAlpha2::Netherlands); // '€ 42,42' $currencyNumeric->format(42.42, CountryAlpha2::Netherlands, LanguageAlpha2::Dutch_Flemish); // '€ 42,42'
CurrencySymbol
$currencySymbol = CurrencySymbol::from('€'); // CurrencySymbol::Euro $currencySymbol = $currencySymbol->name; // 'Euro' $currencySymbol = $currencySymbol->value; // '€' $currencySymbol = CurrencySymbol::forCurrency(CurrencyAlpha3::Euro) // CurrencySymbol::Euro
CurrencyName
$currencyName = CurrencyName::from('Euro'); // CurrencyName::Euro $currencyName = CurrencyName::Euro; // CurrencyName::Euro $name = $currencyName->name; // 'Euro' $value = $currencyName->value; // 'Euro' $minorUnits = $currencyName->getMinorUnits(); // 2 $valueAlpha3 = $currencyName->toCurrencyAlpha3(); // CurrencyAlpha3::Euro $valueAlpha3 = $currencyName->toCurrencyNumeric(); // CurrencyNumeric::Euro $countries = $currencyName->getCountriesAlpha2(); // [CountryAlpha2::Bouvet_Island, CountryAlpha2::Norway, CountryAlpha2::Svalbard_Jan_Mayen] $currencyName->format(42.42, CountryAlpha2::Netherlands); // '€ 42,42' $currencyName->format(42.42, CountryAlpha2::Netherlands, LanguageAlpha2::Dutch_Flemish); // '€ 42,42'
HTTP方法
概述
HttpMethod::from('POST'); // HttpMethod::Post HttpMethod::from('POST')->value; // 'POST' HttpMethod::from('POST')->name; // Post HttpMethod::Post; // HttpMethod::Post public function foo(HttpMethod $httpMethod) {} // Use spec as typehint to enforce valid value
HTTP状态码
概述
HttpStatusCode::from(404); // HttpStatusCode::Not_Found HttpStatusCode::from(404->value; // 404 HttpStatusCode::from(404->name; // Not_Found HttpStatusCode::Not_Found; // HttpStatusCode::Not_Found public function foo(HttpStatusCode $httpStatusCode) {} // Use spec as typehint to enforce valid value
国际呼叫前缀(ITU-T E.164)
不同国家有不同的国际呼叫前缀。这是从ITU-T E.164中提取的规范,列出了所有可能的国际呼叫前缀。
概述
InternationalCallPrefix::from('0'); // InternationalCallPrefix::_0 InternationalCallPrefix::from('0')->value; // '0' InternationalCallPrefix::from('0')->name; // '_0' InternationalCallPrefix::_0; // InternationalCallPrefix::_0 InternationalCallPrefix::_0->getCountriesAlpha2(); // [CountryAlpha2::Samoa] InternationalCallPrefix::forCountry(CountryAlpha2::Netherlands); // InternationalCallPrefix::_00 InternationalCallPrefix::forCountry(CountryAlpha3::Netherlands); // InternationalCallPrefix::_00 InternationalCallPrefix::forCountry(CountryNumeric::Netherlands); // InternationalCallPrefix::_00 InternationalCallPrefix::forCountry(CountryName::Netherlands); // InternationalCallPrefix::_00 public function foo(InternationalCallPrefix $internationalCallPrefix) {} // Use spec as typehint to enforce valid value
语言(ISO639)
🎓 语言代码始终为小写,以避免与国家代码混淆。
🎓 alpha2规范有184种语言,alpha3文献/术语规范有486种语言,alpha3扩展规范有7908种语言。
🎓 如果您必须在alpha3文献和术语规范之间进行选择,术语规范更广泛地使用。
概述
有四种语言代码规范
- 184语言Alpha2(ISO 639-1)
- 486语言Alpha3文献(ISO 639-2)
- 486语言Alpha3术语(ISO 639-2)
- 7908语言Alpha3扩展(ISO 639-3)
如您所见,文献和术语规范的语言数量相同,因此它们之间有一对一的关系。
LanguageAlpha2::from('nl'); // LanguageAlpha2::Dutch_Flemish LanguageAlpha2::from('nl')->value; // 'nl' LanguageAlpha2::from('nl')->name; // 'Dutch_Flemish' LanguageAlpha2::from('nl')->toLanguageAlpha3Bibliographic(); // LanguageAlpha3Bibliographic::Dutch_Flemish LanguageAlpha2::from('nl')->toLanguageAlpha3Bibliographic()->value; // 'dut' LanguageAlpha2::from('nl')->toLanguageAlpha3Terminology(); // LanguageAlpha3Terminology::Dutch_Flemish LanguageAlpha2::from('nl')->toLanguageAlpha3Terminology()->value; // 'nld' LanguageAlpha2::from('nl')->toLanguageName()->value; // 'Dutch; Flemish' LanguageAlpha3Terminology::from('nld'); // LanguageAlpha3Terminology::Dutch_Flemish LanguageAlpha3Bibliographic::from('dut'); // LanguageAlpha3Bibliographic::Dutch_Flemish LanguageAlpha3Extensive::from('nld'); // LanguageAlpha3Extensive::Dutch LanguageAlpha3Extensive::from('dse'); // LanguageAlpha3Extensive::Dutch_Sign_Language LanguageAlpha2::Dutch_Flemish->getNameInLanguage(LanguageAlpha2::Dutch_Flemish); // 'Nederlands' LanguageAlpha2::Dutch_Flemish->getNameInLanguage(LanguageAlpha2::English); // 'Dutch' public function foo(LanguageAlpha2 $languageAlpha2); // Use spec as typehint to enforce valid value
完整文档
LanguageAlpha2(ISO 639-1)
$valueAlpha2 = LanguageAlpha2::from('nl'); // LanguageAlpha2::Dutch_Flemish $value = $valueAlpha2->value; // 'nl' $valueName = $valueAlpha2->name; // 'Dutch_Flemish' $valueAlpha3Bibliographic = $valueAlpha2->toLanguageAlpha3Bibliographic(); // LanguageAlpha3Bibliographic::Dutch_Flemish $valueAlpha3Terminology = $valueAlpha2->toLanguageAlpha3Terminology(); // LanguageAlpha3Terminology::Dutch_Flemish $valueAlpha3Terminology->getNameInLanguage(LanguageAlpha2::Dutch_Flemish); // 'Nederlands' $valueAlpha3Terminology->getNameInLanguage(LanguageAlpha2::English); // 'Dutch'
LanguageAlpha3Bibliographic(ISO 639-2)
$valueAlpha3 = LanguageAlpha3Bibliographic::from('dut'); // LanguageAlpha3Bibliographic::Dutch_Flemish $value = $valueAlpha3->value; // 'dut' $valueName = $valueAlpha3->name; // 'Dutch_Flemish' $valueAlpha2 = $valueAlpha3->toLanguageAlpha2(); // LanguageAlpha2::Dutch_Flemish $valueAlpha3Terminology = $valueAlpha3->toLanguageAlpha3Terminology(); // LanguageAlpha3Terminology::Dutch_Flemish $valueAlpha3Bibliographic->getNameInLanguage(LanguageAlpha2::Dutch_Flemish); // 'Nederlands' $valueAlpha3Bibliographic->getNameInLanguage(LanguageAlpha2::English); // 'Dutch'
LanguageAlpha3Terminology(ISO 639-2)
$valueAlpha3 = LanguageAlpha3Terminology::from('nld'); // LanguageAlpha3Terminology::Dutch_Flemish $value = $valueAlpha3->value; // 'nld' $valueName = $valueAlpha3->name; // 'Dutch_Flemish' $valueAlpha2 = $valueAlpha3->toLanguageAlpha2(); // LanguageAlpha2::Dutch_Flemish $valueAlpha3Bibliographic = $valueAlpha3->toLanguageAlpha3Bibliographic(); // LanguageAlpha3Bibliographic::Dutch_Flemish $valueAlpha3Terminology->getNameInLanguage(LanguageAlpha2::Dutch_Flemish); // 'Nederlands' $valueAlpha3Terminology->getNameInLanguage(LanguageAlpha2::English); // 'Dutch'
LanguageAlpha3Extensive(ISO 639-3)
$valueAlpha3 = LanguageAlpha3Extensive::from('nld'); // LanguageAlpha3Extensive::Dutch $value = $valueAlpha3->value; // 'nld' $valueName = $valueAlpha3->name; // 'Dutch'
语言标签(RFC 5646)
:mortar-board: 语言标签始终有一个主要标签,可以有一个扩展、脚本、区域、一个或多个变体、一个或多个扩展和/或私有子标签。
概述
LanguageTag::tryFromString(''); // null LanguageTag::fromString(); // InvalidArgumentException LanguageTag::fromString('nl'); // LanguageTag(LanguageAlpha2::Dutch_Flemish); LanguageTag::fromString('i-enochian'); // LanguageTag(SingleCharacterSubtag::GRANDFATHERED, privateUseSubtag: 'enochian') LanguageTag::fromString('zh-Hant'); // LanguageTag(LanguageAlpha2::Chinese, script: ScriptSubtag::Han_Traditional_variant) LanguageTag::fromString('sr-Cyrl'); // LanguageTag(LanguageAlpha2::Serbian, scriptSubtag: ScriptCode::Cyrillic) LanguageTag::fromString('zh-cmn-Hans-CN'); // LanguageTag(LanguageAlpha2::Chinese, LanguageAlpha3Extensive::Mandarin_Chinese, ScriptCode::Han_Simplified_variant, CountryAlpha2::China) LanguageTag::fromString('sl-rozaj-biske'); // LanguageTag(LanguageAlpha2::Slovenian, variantSubtag: [LanguageTagVariant::Rezijan, LanguageTagVariant::The_Bila_dialect_of_Resian]) LanguageTag::fromString('de-CH-1901'); // LanguageTag(LanguageAlpha2::German, regionSubtag: CountryAlpha2::Switzerland, variantSubtag: [LanguageTagVariant::Traditional_German_orthography]) LanguageTag::fromString('de-CH-1901')->primaryLanguageSubtag; // LanguageAlpha2::German LanguageTag::fromString('de-CH-1901')->regionSubtag; // CountryAlpha2::Switzerland LanguageAlpha2::Dutch_Flemish->toLanguageTag(); // 'nl' LanguageAlpha2::German->toLanguageTag(regionSubtag: CountryAlpha2::Switzerland, variantSubtag: [LanguageTagVariant::Traditional_German_orthography]); // 'de-CH-1901' public function foo(LanguageTag $languageTag): {} // Use spec as typehint to enforce valid value
地理区域(M49)
🎓 地理区域由三位数字表示。需要前导零。每个地理区域可以跨越多个其他地理区域或国家。
概述
GeographicRegion::from('150'); // GeographicRegion::Europe GeographicRegion::from('150')->value; // '150' GeographicRegion::from('150')->name; // Europe GeographicRegion::Europe; // GeographicRegion::Europe GeographicRegion::from('150')->getDirectSubRegions(); // [GeographicRegion::Eastern_Europe, GeographicRegion::Northern_Europe, ...] GeographicRegion::from('150')->getAllSubRegions(); // [GeographicRegion::Eastern_Europe, GeographicRegion::Northern_Europe, ...] GeographicRegion::from('150')->getDirectSubCountries(); // [] GeographicRegion::from('150')->getAllSubCountries(); // [CountryNumeric::Belarus, CountryNumeric::Bulgaria, ...] public function foo(GeographicRegion $geographicRegion) {} // Use spec as typehint to enforce valid value
国家呼叫前缀(ITU-T E.164)
不同国家有不同的国家呼叫前缀;
概述
NationalCallPrefix::from('0'); // NationalCallPrefix::_0 NationalCallPrefix::from('0')->value; // '0' NationalCallPrefix::from('0')->name; // '_0' NationalCallPrefix::_0; // NationalCallPrefix::_0 NationalCallPrefix::forCountry(CountryAlpha2::Netherlands); // NationalCallPrefix::_0 NationalCallPrefix::forCountry(CountryAlpha3::Netherlands); // NationalCallPrefix::_0 NationalCallPrefix::forCountry(CountryNumeric::Netherlands); // NationalCallPrefix::_0 NationalCallPrefix::forCountry(CountryName::Netherlands); // NationalCallPrefix::_0 public function foo(NationalCallPrefix $nationalCallPrefix) {} // Use spec as typehint to enforce valid value
脚本
概述
ScriptAlias::from('Latin'); // ScriptAlias::Latin ScriptAlias::from('Latin')->value; // 'Latin' ScriptAlias::from('Latin')->name; // 'Latin' ScriptAlias::Latin; // ScriptAlias::Latin ScriptAlias::from('Latin')->toScriptCode(); // ScriptCode::Latin ScriptCode::from('Latn'); // ScriptCode::Latin ScriptName::from('Latin'); // ScriptName::Latin ScriptNumber::from('215'); // ScriptNumber::Latin ScriptAlias::Latin->isSupportedByPHPRegex(); // true ScriptAlias::allForString('еюeuеюευ'); // [ScriptAlias::Cyrillic, ScriptAlias::Greek, ScriptAlias::Latin] ScriptAlias::hasMultipleForString('еюeuеюευ'); // true ScriptAlias::mostCommonInString('еюeuеюευ'); // ScriptAlias::Cyrillic public function foo(ScriptAlias $scriptAlias) {} // Use spec as typehint to enforce valid value
完整文档
ScriptAlias
ScriptAlias::from('Latin'); // ScriptAlias::latin ScriptAlias::from('Latin')->value; // 'Latin' ScriptAlias::from('Latin')->name; // 'Latin' ScriptAlias::from('Latin')->toScriptCode(); // ScriptCode::Latin ScriptAlias::from('Latin')->toScriptName(); // ScriptName::Latin ScriptAlias::from('Latin')->toScriptNumber(); // ScriptNumber::Latin ScriptAlias::Latin; // ScriptAlias::Latin ScriptAlias::from('Latin')->isSupportedByPHPRegex(); // true ScriptAlias::allForString('еюeuеюευ'); // [ScriptAlias::Cyrillic, ScriptAlias::Greek, ScriptAlias::Latin] ScriptAlias::hasMultipleForString('еюeuеюευ'); // true ScriptAlias::mostCommonInString('еюeuеюευ'); // ScriptAlias::Cyrillic public function foo(ScriptAlias $scriptAlias) {} // Use spec as typehint to enforce valid value
PHP支持使用以下记法检测脚本的正则表达式
匹配任何阿拉伯字符
\p{Arabic}
匹配任何非阿拉伯字符
\P{Arabic}
并非所有脚本都由PHP正则表达式支持。完整的列表可以在PHP Unicode字符属性文档中找到。为了方便,该页面的信息每天都会被解析,并使用isSupportedByPHPRegex
方法和SupportedByPHPRegex
属性提供,这是isSupportedByPHPRegex
方法使用的底层信息。
ScriptCode
ScriptCode::from('Latn'); // ScriptCode::latin ScriptCode::from('Latn')->value; // 'Latin' ScriptCode::from('Latn')->name; // 'Latin' ScriptCode::from('Latn')->toScriptAlias(); // ScriptAlias::Latin ScriptCode::from('Latn')->toScriptName(); // ScriptName::Latin ScriptCode::from('Latn')->toScriptNumber(); // ScriptNumber::Latin ScriptCode::Latin; // ScriptCode::Latin ScriptCode::allForString('еюeuеюευ'); // [ScriptCode::Cyrillic, ScriptCode::Greek, ScriptCode::Latin] ScriptCode::hasMultipleForString('еюeuеюευ'); // true ScriptCode::mostCommonInString('еюeuеюευ'); // ScriptCode::Cyrillic public function foo(ScriptCode $scriptCode) {} // Use spec as typehint to enforce valid value
ScriptName
ScriptName::from('Latin'); // ScriptName::latin ScriptName::from('Latin')->value; // 'Latin' ScriptName::from('Latin')->name; // 'Latin' ScriptName::from('Latin')->toScriptCode(); // ScriptCode::Latin ScriptName::from('Latin')->toScriptAlias(); // ScriptAlias::Latin ScriptName::from('Latin')->toScriptNumber(); // ScriptNumber::Latin ScriptName::Latin; // ScriptName::Latin ScriptName::allForString('еюeuеюευ'); // [ScriptName::Cyrillic, ScriptName::Greek, ScriptName::Latin] ScriptName::hasMultipleForString('еюeuеюευ'); // true ScriptName::mostCommonInString('еюeuеюευ'); // ScriptName::Cyrillic public function foo(ScriptName $scriptName) {} // Use spec as typehint to enforce valid value
ScriptNumber
ScriptNumber::from('215'); // ScriptNumber::latin ScriptNumber::from('215')->value; // 'Latin' ScriptNumber::from('215')->name; // 'Latin' ScriptNumber::from('215')->toScriptCode(); // ScriptCode::Latin ScriptNumber::from('215')->toScriptName(); // ScriptName::Latin ScriptNumber::from('215')->toScriptAlias(); // ScriptAlias::Latin ScriptNumber::Latin; // ScriptNumber::Latin ScriptNumber::allForString('еюeuеюευ'); // [ScriptNumber::Cyrillic, ScriptAlias::Greek, ScriptAlias::Latin] ScriptNumber::hasMultipleForString('еюeuеюευ'); // true ScriptNumber::mostCommonInString('еюeuеюευ'); // ScriptNumber::Cyrillic public function foo(ScriptNumber $scriptNumber) {} // Use spec as typehint to enforce valid value
顶级域名
目前有6种顶级域名类型
- CountryCode
- GenericRestricted
- Generic
- Infrastructure
- Sponsored
- Test
大多数这些规范有几个“未管理”的顶级域名(TLD),因此目前不可用。这些已被标记为已弃用,但保留在规范中。有一个例外:所有测试TLD始终未管理,因此从未被标记为已弃用。
国家代码TLD
当一个TLD被IANA标记为未管理时,它会被标记为已弃用。
CountryCodeTLD::from('nl'); // CountryCodeTLD::nl CountryCodeTLD::nl; // CountryCodeTLD::nl CountryCodeTLD::from('nl')->value; // 'nl' CountryCodeTLD::from('nl')->name; // 'nl' CountryCodeTLD::from('nl')->isAssigned(); // true CountryCodeTLD::from('nl')->getCountryAlpha2(); // CountryAlpha2::Netherlands CountryCodeTLD::from('nl')->getCountryAlpha3(); // CountryAlpha3::Netherlands CountryCodeTLD::from('nl')->getCountryNumeric(); // CountryNumeric::Netherlands public function foo(CountryCodeTLD $countryCodeTLD) {} // Use spec as typehint to enforce valid value
通用受限TLD
当一个TLD被IANA标记为未管理时,它会被标记为已弃用。
GenericRestrictedTLD::from('name'); // GenericRestrictedTLD::name GenericRestrictedTLD::name; // GenericRestrictedTLD::name GenericRestrictedTLD::from('name')->value; // 'name' GenericRestrictedTLD::from('name')->name; // 'name' GenericRestrictedTLD::from('name')->isAssigned(); // true public function foo(GenericRestrictedTLD $genericRestrictedTLD) {} // Use spec as typehint to enforce valid value
通用TLD
当一个TLD被IANA标记为未管理时,它会被标记为已弃用。
GenericTLD::from('aaa'); // GenericTLD::aaa GenericTLD::aaa; // GenericTLD::aaa GenericTLD::from('aaa')->value; // 'aaa' GenericTLD::from('aaa')->name; // 'aaa' GenericTLD::from('aaa')->isAssigned(); // true public function foo(GenericTLD $genericTLD) {} // Use spec as typehint to enforce valid value
基础设施TLD
当一个TLD被IANA标记为未管理时,它会被标记为已弃用。
InfrastructureTLD::from('arpa'); // InfrastructureTLD::arpa InfrastructureTLD::arpa; // InfrastructureTLD::arpa InfrastructureTLD::from('arpa')->value; // 'arpa' InfrastructureTLD::from('arpa')->name; // 'arpa' InfrastructureTLD::from('arpa')->isAssigned(); // true public function foo(InfrastructureTLD $infrastructureTLD) {} // Use spec as typehint to enforce valid value
赞助TLD
当一个TLD被IANA标记为未管理时,它会被标记为已弃用。
SponsoredTLD::from('aero'); // SponsoredTLD::aero SponsoredTLD::arpa; // SponsoredTLD::aero SponsoredTLD::from('aero')->value; // 'aero' SponsoredTLD::from('aero')->name; // 'aero' SponsoredTLD::from('aero')->isAssigned(); // true public function foo(SponsoredTLD $sponsoredTLD) {} // Use spec as typehint to enforce valid value
测试TLD
所有测试TLD始终未管理,因此从未被标记为已弃用。
TestTLD::from('テスト'); // TestTLD::tesuto_katakana TestTLD::tesuto_katakana; // TestTLD::tesuto_katakana TestTLD::from('テスト')->value; // 'テスト' TestTLD::from('テスト')->name; // 'tesuto_katakana' TestTLD::from('テスト')->isAssigned() // false public function foo(TestTLD $testTLD) {} // Use spec as typehint to enforce valid value