123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 |
- <?php
- /**
- * @file
- * CCK Field for Ukrainian phone numbers.
- */
- /**
- * Helper function knows all valid country codes.
- *
- * @return array of stings for use in preg_match* fuunctions.
- *
- * Return PREG string elements in array like "44\d{7}|278\d{6}" which will match
- * all nine-digit valid numbers.
- * Please note - leading zero stripped for both mobile and landline.
- *
- * For performance reason there are a set of strings instead of single very long one.
- */
- function _phone_ua_get_valid_masks() {
- $result = cache_get('phone' . __FUNCTION__);
- if( !empty($result) ) {
- return $result->data;
- }
- $mobiles = array(
- "39",
- "50",
- "63",
- "66",
- "67",
- "68",
- "91",
- "92",
- "93",
- "94",
- "95",
- "96",
- "97",
- "98",
- "99",
- );
- $landlines = array(
- "255",
- "260",
- "263",
- "265",
- "268",
- "269",
- "271",
- "272",
- "278",
- "312",
- "3131",
- "3132",
- "3133",
- "3134",
- "3135",
- "3136",
- "3137",
- "3141",
- "3142",
- "3143",
- "3144",
- "3145",
- "3146",
- "322",
- "3230",
- "3231",
- "3234",
- "3236",
- "3238",
- "3239",
- "3241",
- "3244",
- "3245",
- "3247",
- "3248",
- "3249",
- "3251",
- "3252",
- "3254",
- "3255",
- "3256",
- "3257",
- "3259",
- "32606",
- "3261",
- "3263",
- "3264",
- "3265",
- "3266",
- "3269",
- "3310",
- "3322",
- "3342",
- "3344",
- "3346",
- "3348",
- "3352",
- "3355",
- "3357",
- "3362",
- "3363",
- "3365",
- "3366",
- "3368",
- "3372",
- "3374",
- "3376",
- "3377",
- "3379",
- "342",
- "3430",
- "3431",
- "3432",
- "3433",
- "3434",
- "3435",
- "3436",
- "3438",
- "3471",
- "3472",
- "3474",
- "3475",
- "3476",
- "3477",
- "3478",
- "3479",
- "352",
- "3540",
- "3541",
- "3542",
- "3543",
- "3544",
- "3546",
- "3547",
- "3548",
- "3549",
- "3550",
- "3551",
- "3552",
- "3554",
- "3555",
- "3557",
- "3558",
- "362",
- "3632",
- "3633",
- "3634",
- "3635",
- "3636",
- "3637",
- "3650",
- "3651",
- "3652",
- "3653",
- "3654",
- "3655",
- "3656",
- "3657",
- "3658",
- "3659",
- "372",
- "373",
- "3740",
- "3741",
- "382",
- "384",
- "385",
- "412",
- "4130",
- "4132",
- "4133",
- "4134",
- "4135",
- "4136",
- "4137",
- "4138",
- "4139",
- "414",
- "4161",
- "4162",
- "4231",
- "4232",
- "4241",
- "432",
- "4330",
- "4331",
- "4332",
- "4333",
- "4334",
- "4335",
- "4336",
- "4337",
- "43388",
- "4340",
- "4341",
- "4342",
- "4343",
- "4344",
- "4345",
- "4346",
- "4347",
- "4348",
- "4349",
- "4350",
- "4351",
- "4352",
- "4353",
- "4355",
- "4356",
- "4357",
- "4358",
- "44",
- "462",
- "4631",
- "4632",
- "4633",
- "4634",
- "4635",
- "4636",
- "4637",
- "4641",
- "4642",
- "4643",
- "4644",
- "4645",
- "4646",
- "4653",
- "4654",
- "4655",
- "4656",
- "4657",
- "4658",
- "4659",
- "472",
- "473",
- "4740",
- "4741",
- "4742",
- "4744",
- "4745",
- "4746",
- "4747",
- "4748",
- "4749",
- "482",
- "484",
- "4851",
- "4852",
- "4853",
- "4854",
- "4855",
- "4856",
- "4857",
- "4858",
- "4859",
- "4860",
- "4861",
- "4862",
- "4863",
- "4864",
- "4865",
- "4866",
- "4867",
- "4868",
- "512",
- "5131",
- "5132",
- "5133",
- "5134",
- "5135",
- "5136",
- "5151",
- "5152",
- "5153",
- "5154",
- "5158",
- "5159",
- "5161",
- "5162",
- "5163",
- "5167",
- "5168",
- "522",
- "5233",
- "5234",
- "5235",
- "5236",
- "5237",
- "5238",
- "5239",
- "5240",
- "5241",
- "5242",
- "5250",
- "5251",
- "5252",
- "5253",
- "5254",
- "5256",
- "5257",
- "5258",
- "5259",
- "532",
- "5340",
- "5341",
- "5342",
- "5343",
- "5344",
- "5345",
- "5346",
- "5347",
- "5348",
- "5350",
- "5351",
- "5352",
- "5353",
- "5354",
- "5355",
- "5356",
- "5357",
- "5358",
- "5359",
- "536",
- "5361",
- "5362",
- "5363",
- "5364",
- "5365",
- "5366",
- "542",
- "5422",
- "5442",
- "5443",
- "5444",
- "5445",
- "5446",
- "5447",
- "5448",
- "5449",
- "5451",
- "5452",
- "5453",
- "5454",
- "5455",
- "5456",
- "5457",
- "5458",
- "5459",
- "552",
- "553",
- "5542",
- "5543",
- "5544",
- "5545",
- "5546",
- "5547",
- "5548",
- "5549",
- "56",
- "5610",
- "5611",
- "5612",
- "5615",
- "5616",
- "5617",
- "5618",
- "562",
- "5630",
- "5632",
- "5633",
- "5636",
- "5638",
- "5639",
- "564",
- "5650",
- "5651",
- "5652",
- "5653",
- "5655",
- "5656",
- "5657",
- "5658",
- "5662",
- "5663",
- "5665",
- "5667",
- "5668",
- "567",
- "569",
- "572",
- "574",
- "575",
- "5761",
- "5762",
- "5763",
- "5764",
- "5765",
- "5766",
- "612",
- "6131",
- "6132",
- "6133",
- "6136",
- "6137",
- "6138",
- "6139",
- "6140",
- "6141",
- "6142",
- "6143",
- "6144",
- "6145",
- "6147",
- "6153",
- "6156",
- "6162",
- "6165",
- "6175",
- "6178",
- "619",
- "6212",
- "6214",
- "6217",
- "622",
- "6232",
- "6236",
- "6237",
- "6239",
- "6242",
- "6243",
- "6244",
- "6246",
- "6247",
- "6249",
- "6250",
- "6252",
- "6253",
- "6254",
- "6255",
- "6256",
- "6257",
- "6259",
- "6261",
- "6262",
- "6264",
- "6267",
- "6269",
- "6272",
- "6273",
- "6274",
- "6275",
- "6277",
- "6278",
- "6279",
- "629",
- "642",
- "6431",
- "6432",
- "6433",
- "6434",
- "6435",
- "6436",
- "6441",
- "6442",
- "6443",
- "6444",
- "6445",
- "6446",
- "6451",
- "6452",
- "6453",
- "6454",
- "6455",
- "6456",
- "6461",
- "6462",
- "6463",
- "6464",
- "6465",
- "6466",
- "6471",
- "6472",
- "6473",
- "6474",
- "652",
- "654",
- "655",
- "6560",
- "6561",
- "6562",
- "6563",
- "6564",
- "6565",
- "6566",
- "6569",
- "692",
- );
- $all_codes = array_merge($mobiles, $landlines);
- $TOTAL_DIGITS = 9;
- $ITEMS_PER_LINE = 30;
- $counter = 0;
- $line = '';
- foreach ($all_codes as $code) {
- if (++$counter >= $ITEMS_PER_LINE) {
- $result[] = $line;
- $counter = 0;
- $line = '';
- }
- $item = $code . '\d{' . ($TOTAL_DIGITS - strlen($code)) . '}';
- $line .= (empty($line) ? '' : '|') . $item;
- }
- $result[] = $line;
- cache_set('phone' . __FUNCTION__, $result);
- return $result;
- }
- function phone_ua_metadata() {
- // These strings are translated using t() on output.
- return array(
- 'error' => '"%value" is not a valid Ukrainian mobile phone number<br />'
- . 'Ukrainian phone numbers should only have 10 digits staring with 0 with optional country prefix +38 .<br />'
- . 'And, of course, city or mobile code - a first few digits after 0 - have to be valid.',
- );
- }
- /**
- * Verifies that $phonenumber is valid
- *
- * @param string $phonenumber
- * @return boolean Returns boolean FALSE if the phone number is not valid.
- */
- function valid_ua_phone_number($phonenumber) {
- // For adressing Ukraine phones used both +38 and +380 as a prefix.
- // So lets clean up any spaces, pareenthesis, minus signs etc first.
- $cleaning_pattern = '/( |\-|\(|\))*/';
- $refined_phonenumber = preg_replace($cleaning_pattern, '', $phonenumber);
- // define regular expression
- $code_packs = _phone_ua_get_valid_masks();
- foreach ($code_packs as $codes) {
- // $regex = "/^((8|\+38)-?)?\s*(\(?044\)?)?-?\d{3}-?\d{2}-?\d{2}$/i";
- // Please note - pure 8 as a prefix is obsolete.
- $regex = "/^(\+38)?0(" . $codes . ")$/";
- if (preg_match($regex, $refined_phonenumber)) {
- return true;
- }
- }
- // return true if valid, false otherwise
- return false;
- }
- /**
- * Formatting for Unkraine Phone Numbers.
- *
- * @param string $phonenumber
- * @return string Returns a string containting the phone number with some formatting.
- */
- function format_ua_phone_number($phonenumber, $field) {
- //$phonenumber = trim($phonenumber);
- // do some formatting on the phone number
- /* ==> to be done ==> add the country code
- if ($field['phone_country_code']) {
- if ($matches[1] != "+39") {
- $phonenumber = "+39" . " " . $phonenumber;
- }
- }
- */
- return $phonenumber;
- }
|