| 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;}
 |