├── CHANGELOG.md ├── LICENSE ├── README.md ├── composer.json └── src ├── Abbr.php ├── Base.php └── Full.php /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `laravel-validation-rules/us-state` will be documented in this file. 4 | 5 | ### 1.1.0 6 | - Add Mexico states 7 | 8 | ### 1.0.0 9 | - Initial release and connected with packagist 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2017 Scott Wilcox 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # State 2 | 3 | Validate US States, Canada Provinces, and Mexico States 4 | 5 |

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |

22 | 23 | ## Installation 24 | 25 | ```bash 26 | composer require laravel-validation-rules/us-state 27 | ``` 28 | 29 | ## Usage 30 | 31 | ```php 32 | use LVR\State\Abbr; 33 | use LVR\State\Full; 34 | 35 | # Abbreviation vs Full 36 | $request->validate(['test' => 'UT'], ['test' => new Abbr]); // Pass! 37 | $request->validate(['test' => 'BC'], ['test' => new Abbr); // Pass! 38 | $request->validate(['test' => 'SON'], ['test' => new Abbr); // Pass! 39 | $request->validate(['test' => 'Utah'], ['test' => new Full]); // Pass! 40 | $request->validate(['test' => 'Alberta'], ['test' => new Full]); // Pass! 41 | $request->validate(['test' => 'Sonora'], ['test' => new Full]); // Pass! 42 | 43 | # Abbreviation - USA vs Canada vs Mexico 44 | $request->validate(['test' => 'UT'], ['test' => new Abbr]); // Pass! 45 | $request->validate(['test' => 'UT'], ['test' => new Abbr('US')]); // Pass! 46 | $request->validate(['test' => 'BC'], ['test' => new Abbr('CA')); // Pass! 47 | $request->validate(['test' => 'SON'], ['test' => new Abbr('MX')); // Pass! 48 | 49 | # Full - USA vs Canada vs Mexico 50 | $request->validate(['test' => 'Utah'], ['test' => new Full('US')]); // Pass! 51 | $request->validate(['test' => 'Alberta'], ['test' => new Full('CA')]); // Pass! 52 | $request->validate(['test' => 'Sonora'], ['text' => new Full('MX')]); // Pass! 53 | ``` 54 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel-validation-rules/us-state", 3 | "description": "Validate US States and Canada Provinces", 4 | "keywords": [ 5 | "laravel", 6 | "validator", 7 | "phone", 8 | "tylercd100" 9 | ], 10 | "homepage": "https://github.com/laravel-validation-rules/us-state", 11 | "license": "Apache-2.0", 12 | "authors": [ 13 | { 14 | "name": "Tyler Arbon", 15 | "email": "tylercd100@gmail.com" 16 | }, 17 | { 18 | "name": "Scott Robinson", 19 | "email": "scott@dor.ky", 20 | "homepage": "http://dor.ky" 21 | } 22 | ], 23 | "autoload": { 24 | "psr-4": { 25 | "LVR\\State\\": "src/" 26 | } 27 | }, 28 | "autoload-dev": { 29 | "psr-4": { 30 | "LVR\\State\\Tests\\": "tests/" 31 | } 32 | }, 33 | "minimum-stability": "stable", 34 | "require": { 35 | "illuminate/contracts": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", 36 | "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0" 37 | }, 38 | "require-dev": { 39 | "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.5|^11.5.3", 40 | "orchestra/testbench": "^3.5|^4.0|^5.0|^7.0|^8.0|^9.0|^10.0" 41 | }, 42 | "suggest": [] 43 | } 44 | -------------------------------------------------------------------------------- /src/Abbr.php: -------------------------------------------------------------------------------- 1 | isAbbr($value, $this->country); 17 | } 18 | 19 | /** 20 | * Get the validation error message. 21 | * 22 | * @return string 23 | */ 24 | public function message() 25 | { 26 | return ":attribute must be an abbreviated {$this->subject}"; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Base.php: -------------------------------------------------------------------------------- 1 | $country, 18 | ], [ 19 | 20 | "country" => "nullable|string|in:US,CA,MX,BR,NG", 21 | ]); 22 | 23 | if ($v->fails()) { 24 | throw new \Exception($v->errors()->first(), 1); 25 | } 26 | 27 | $this->country = $country; 28 | $this->subject = $this->getSubject($this->country); 29 | } 30 | 31 | protected function isFull($value, string $country = null): bool 32 | { 33 | return in_array(Str::title($value), $this->getStateNames($country)); 34 | } 35 | 36 | protected function isAbbr($value, string $country = null): bool 37 | { 38 | return in_array(Str::upper($value), $this->getStateAbbreviations($country)); 39 | } 40 | 41 | protected $states = [ 42 | "US" => [ 43 | ["abbr" => 'AL', "name" => 'Alabama'], 44 | ["abbr" => 'AK', "name" => 'Alaska'], 45 | ["abbr" => 'AZ', "name" => 'Arizona'], 46 | ["abbr" => 'AR', "name" => 'Arkansas'], 47 | ["abbr" => 'CA', "name" => 'California'], 48 | ["abbr" => 'CO', "name" => 'Colorado'], 49 | ["abbr" => 'CT', "name" => 'Connecticut'], 50 | ["abbr" => 'DC', "name" => 'District Of Columbia'], 51 | ["abbr" => 'DE', "name" => 'Delaware'], 52 | ["abbr" => 'FL', "name" => 'Florida'], 53 | ["abbr" => 'GA', "name" => 'Georgia'], 54 | ["abbr" => 'HI', "name" => 'Hawaii'], 55 | ["abbr" => 'ID', "name" => 'Idaho'], 56 | ["abbr" => 'IL', "name" => 'Illinois'], 57 | ["abbr" => 'IN', "name" => 'Indiana'], 58 | ["abbr" => 'IA', "name" => 'Iowa'], 59 | ["abbr" => 'KS', "name" => 'Kansas'], 60 | ["abbr" => 'KY', "name" => 'Kentucky'], 61 | ["abbr" => 'LA', "name" => 'Louisiana'], 62 | ["abbr" => 'ME', "name" => 'Maine'], 63 | ["abbr" => 'MD', "name" => 'Maryland'], 64 | ["abbr" => 'MA', "name" => 'Massachusetts'], 65 | ["abbr" => 'MI', "name" => 'Michigan'], 66 | ["abbr" => 'MN', "name" => 'Minnesota'], 67 | ["abbr" => 'MS', "name" => 'Mississippi'], 68 | ["abbr" => 'MO', "name" => 'Missouri'], 69 | ["abbr" => 'MT', "name" => 'Montana'], 70 | ["abbr" => 'NE', "name" => 'Nebraska'], 71 | ["abbr" => 'NV', "name" => 'Nevada'], 72 | ["abbr" => 'NH', "name" => 'New Hampshire'], 73 | ["abbr" => 'NJ', "name" => 'New Jersey'], 74 | ["abbr" => 'NM', "name" => 'New Mexico'], 75 | ["abbr" => 'NY', "name" => 'New York'], 76 | ["abbr" => 'NC', "name" => 'North Carolina'], 77 | ["abbr" => 'ND', "name" => 'North Dakota'], 78 | ["abbr" => 'OH', "name" => 'Ohio'], 79 | ["abbr" => 'OK', "name" => 'Oklahoma'], 80 | ["abbr" => 'OR', "name" => 'Oregon'], 81 | ["abbr" => 'PA', "name" => 'Pennsylvania'], 82 | ["abbr" => 'RI', "name" => 'Rhode Island'], 83 | ["abbr" => 'SC', "name" => 'South Carolina'], 84 | ["abbr" => 'SD', "name" => 'South Dakota'], 85 | ["abbr" => 'TN', "name" => 'Tennessee'], 86 | ["abbr" => 'TX', "name" => 'Texas'], 87 | ["abbr" => 'UT', "name" => 'Utah'], 88 | ["abbr" => 'VT', "name" => 'Vermont'], 89 | ["abbr" => 'VA', "name" => 'Virginia'], 90 | ["abbr" => 'WA', "name" => 'Washington'], 91 | ["abbr" => 'WV', "name" => 'West Virginia'], 92 | ["abbr" => 'WI', "name" => 'Wisconsin'], 93 | ["abbr" => 'WY', "name" => 'Wyoming'], 94 | ["abbr" => 'AS', "name" => 'American Samoa'], 95 | ["abbr" => 'FM', "name" => 'Federated States Of Micronesia'], 96 | ["abbr" => 'GU', "name" => 'Guam'], 97 | ["abbr" => 'MH', "name" => 'Marshall Islands'], 98 | ["abbr" => 'MP', "name" => 'Northern Mariana Islands'], 99 | ["abbr" => 'PW', "name" => 'Pala'], 100 | ["abbr" => 'PR', "name" => 'Puerto Rico'], 101 | ["abbr" => 'VI', "name" => 'Virgin Islands'] 102 | ], 103 | "CA" => [ 104 | ["abbr" => 'AB', "name" => 'Alberta'], 105 | ["abbr" => 'BC', "name" => 'British Columbia'], 106 | ["abbr" => 'MB', "name" => 'Manitoba'], 107 | ["abbr" => 'NB', "name" => 'New Brunswick'], 108 | ["abbr" => 'NL', "name" => 'Newfoundland And Labrador'], 109 | ["abbr" => 'NS', "name" => 'Nova Scotia'], 110 | ["abbr" => 'NT', "name" => 'Northwest Territories'], 111 | ["abbr" => 'NU', "name" => 'Nunavut'], 112 | ["abbr" => 'ON', "name" => 'Ontario'], 113 | ["abbr" => 'PE', "name" => 'Prince Edward Island'], 114 | ["abbr" => 'QC', "name" => 'Quebec'], 115 | ["abbr" => 'SK', "name" => 'Saskatchewan'], 116 | ["abbr" => 'YT', "name" => 'Yukon'], 117 | ], 118 | "MX" => [ 119 | ["abbr" => "AGU", "name" => "Aguascalientes"], 120 | ["abbr" => "BCN", "name" => "Baja California"], 121 | ["abbr" => "BCS", "name" => "Baja California Sur"], 122 | ["abbr" => "CAM", "name" => "Campeche"], 123 | ["abbr" => "CHP", "name" => "Chiapas"], 124 | ["abbr" => "CHH", "name" => "Chihuahua"], 125 | ["abbr" => "CMX", "name" => "Ciudad de México"], 126 | ["abbr" => "COA", "name" => "Coahuila de Zaragoza"], 127 | ["abbr" => "COL", "name" => "Colima"], 128 | ["abbr" => "DUR", "name" => "Durango"], 129 | ["abbr" => "GUA", "name" => "Guanajuato"], 130 | ["abbr" => "GRO", "name" => "Guerrero"], 131 | ["abbr" => "HID", "name" => "Hidalgo"], 132 | ["abbr" => "JAL", "name" => "Jalisco"], 133 | ["abbr" => "MIC", "name" => "Michoacán de Ocampo"], 134 | ["abbr" => "MOR", "name" => "Morelos"], 135 | ["abbr" => "MEX", "name" => "México"], 136 | ["abbr" => "NAY", "name" => "Nayarit"], 137 | ["abbr" => "NLE", "name" => "Nuevo León"], 138 | ["abbr" => "OAX", "name" => "Oaxaca"], 139 | ["abbr" => "PUE", "name" => "Puebla"], 140 | ["abbr" => "QUE", "name" => "Querétaro"], 141 | ["abbr" => "ROO", "name" => "Quintana Roo"], 142 | ["abbr" => "SLP", "name" => "San Luis Potosí"], 143 | ["abbr" => "SIN", "name" => "Sinaloa"], 144 | ["abbr" => "SON", "name" => "Sonora"], 145 | ["abbr" => "TAB", "name" => "Tabasco"], 146 | ["abbr" => "TAM", "name" => "Tamaulipas"], 147 | ["abbr" => "TLA", "name" => "Tlaxcala"], 148 | ["abbr" => "VER", "name" => "Veracruz de Ignacio de la Llave"], 149 | ["abbr" => "YUC", "name" => "Yucatán"], 150 | ["abbr" => "ZAC", "name" => "Zacatecas"], 151 | ], 152 | "BR" => [ 153 | ["abbr" => 'AC', "name" => 'Acre'], 154 | ["abbr" => 'AL', "name" => 'Alagoas'], 155 | ["abbr" => 'AP', "name" => 'Amapá'], 156 | ["abbr" => 'AM', "name" => 'Amazonas'], 157 | ["abbr" => 'BA', "name" => 'Bahia'], 158 | ["abbr" => 'CE', "name" => 'Ceará'], 159 | ["abbr" => 'DF', "name" => 'Distrito Federal'], 160 | ["abbr" => 'ES', "name" => 'Espírito Santo'], 161 | ["abbr" => 'GO', "name" => 'Goiás'], 162 | ["abbr" => 'MA', "name" => 'Maranhão'], 163 | ["abbr" => 'MT', "name" => 'Mato Grosso'], 164 | ["abbr" => 'MS', "name" => 'Mato Grosso do Sul'], 165 | ["abbr" => 'MG', "name" => 'Minas Gerais'], 166 | ["abbr" => 'PA', "name" => 'Pará'], 167 | ["abbr" => 'PB', "name" => 'Paraíba'], 168 | ["abbr" => 'PR', "name" => 'Paraná'], 169 | ["abbr" => 'PE', "name" => 'Pernambuco'], 170 | ["abbr" => 'PI', "name" => 'Piauí'], 171 | ["abbr" => 'RR', "name" => 'Roraima'], 172 | ["abbr" => 'RO', "name" => 'Rondônia'], 173 | ["abbr" => 'RJ', "name" => 'Rio de Janeiro'], 174 | ["abbr" => 'RN', "name" => 'Rio Grande do Norte'], 175 | ["abbr" => 'RS', "name" => 'Rio Grande do Sul'], 176 | ["abbr" => 'SC', "name" => 'Santa Catarina'], 177 | ["abbr" => 'SP', "name" => 'São Paulo'], 178 | ["abbr" => 'SE', "name" => 'Sergipe'], 179 | ["abbr" => 'TO', "name" => 'Tocantins'], 180 | ], 181 | "NG" => [ 182 | ["abbr" => "AB", "name" => "Abia"], 183 | ["abbr" => "AD", "name" => "Adamawa"], 184 | ["abbr" => "AK", "name" => "Akwa Ibom"], 185 | ["abbr" => "AN", "name" => "Anambra"], 186 | ["abbr" => "BA", "name" => "Bauchi"], 187 | ["abbr" => "BY", "name" => "Bayelsa"], 188 | ["abbr" => "BE", "name" => "Benue"], 189 | ["abbr" => "BO", "name" => "Borno"], 190 | ["abbr" => "CR", "name" => "Cross River"], 191 | ["abbr" => "DE", "name" => "Delta"], 192 | ["abbr" => "EB", "name" => "Ebonyi"], 193 | ["abbr" => "ED", "name" => "Edo"], 194 | ["abbr" => "EK", "name" => "Ekiti"], 195 | ["abbr" => "EN", "name" => "Enugu"], 196 | ["abbr" => "FC", "name" => "Federal Capital Territory"], 197 | ["abbr" => "GO", "name" => "Gombe"], 198 | ["abbr" => "IM", "name" => "Imo"], 199 | ["abbr" => "JI", "name" => "Jigawa"], 200 | ["abbr" => "KD", "name" => "Kaduna"], 201 | ["abbr" => "KN", "name" => "Kano"], 202 | ["abbr" => "KT", "name" => "Katsina"], 203 | ["abbr" => "KE", "name" => "Kebbi"], 204 | ["abbr" => "KO", "name" => "Kogi"], 205 | ["abbr" => "LA", "name" => "Lagos"], 206 | ["abbr" => "NA", "name" => "Nasarawa"], 207 | ["abbr" => "NI", "name" => "Niger"], 208 | ["abbr" => "OG", "name" => "Ogun"], 209 | ["abbr" => "ON", "name" => "Ondo"], 210 | ["abbr" => "OS", "name" => "Osun"], 211 | ["abbr" => "OY", "name" => "Oyo"], 212 | ["abbr" => "PL", "name" => "Plateau"], 213 | ["abbr" => "RI", "name" => "Rivers"], 214 | ["abbr" => "SO", "name" => "Sokoto"], 215 | ["abbr" => "TA", "name" => "Taraba"], 216 | ["abbr" => "YO", "name" => "Yobe"], 217 | ["abbr" => "ZA", "name" => "Zamfara"], 218 | 219 | ] 220 | ]; 221 | 222 | protected function getSubject(string $country = null): string 223 | { 224 | switch($country) 225 | { 226 | case "US": 227 | case "MX": 228 | case "BR": 229 | case "NG": 230 | return "State"; 231 | case "CA": 232 | return "Province"; 233 | default: 234 | return "State or Province"; 235 | } 236 | } 237 | 238 | protected function getStateAbbreviations($country = null) 239 | { 240 | $x = []; 241 | foreach ($this->states as $c => $states) { 242 | if ($country === null || $c === $country) { 243 | foreach ($states as $state) { 244 | $x[] = $state['abbr']; 245 | } 246 | } 247 | } 248 | return $x; 249 | } 250 | 251 | protected function getStateNames($country = null) 252 | { 253 | $x = []; 254 | foreach ($this->states as $c => $states) { 255 | if ($country === null || $c === $country) { 256 | foreach ($states as $state) { 257 | $x[] = $state['name']; 258 | } 259 | } 260 | } 261 | return $x; 262 | } 263 | 264 | /** 265 | * Determine if the validation rule passes. 266 | * 267 | * @param string $attribute 268 | * @param mixed $value 269 | * @return bool 270 | */ 271 | abstract public function passes($attribute, $value); 272 | 273 | /** 274 | * Get the validation error message. 275 | * 276 | * @return string 277 | */ 278 | abstract public function message(); 279 | } 280 | -------------------------------------------------------------------------------- /src/Full.php: -------------------------------------------------------------------------------- 1 | isFull($value, $this->country); 17 | } 18 | 19 | /** 20 | * Get the validation error message. 21 | * 22 | * @return string 23 | */ 24 | public function message() 25 | { 26 | return ":attribute must be the full name of the {$this->subject}"; 27 | } 28 | } 29 | --------------------------------------------------------------------------------