Jump to content
php.lv forumi

preg_match telefona numuram


ray

Recommended Posts

Ir tāda problēma, ka vajadzētu preg_match telefona numuram, bet nu par regular expressions izpratne diemžēl nav un meklējot netā neizdodas atrast to ko vajag.

 

Tātad vajadzētu izveidot regular expression telefona numuram, kuram iespējamie varianti būtu šādi:

+371 87654321

+37187654321

37187654321

0037187654321

87654321

 

Varbūt kāds var palīdzēt?

Link to comment
Share on other sites

Zini tādu funkciju substr() ? Zini vēl tādu strlen()?

 

Nu lūk, uztaisi skriptu, kas pārbauda vai pirmais simbols ir "+"

Un tālāk iet cikls, kas pārbauda, vai pārējie simboli ir skaitļi vai atstarpes.

 

Tāds brutālais variants, bet vismaz būsi izdarījis pats :)

Link to comment
Share on other sites

You people, are ridiculous.

<?php
function validate_phone_lv($phone)
{
   $phone = floatval(preg_replace('/[^0-9]/', '', $phone));
   if (($phone > 37100000000 && $phone < 37199999999) || ($phone > 10000000 && $phone < 99999999)) {
    return true;
   } else {
    return false;
   }
}
$test = array(
   '+37198273647',
   '37198273647',
   '0098273647',
   '00 98 27 36 47',
   '+00 98273647 :*',
   '8273647', //Short
   '238488872' //Long
);
foreach ($test as $num) {
   var_dump(validate_phone_lv($num)) . PHP_EOL;
}

Link to comment
Share on other sites

if (<true>) {
return true;
} else {
return false;
}

druās acīs :p

 

un vai šis ir valīds nr: -3q7w1e9r8t2y7u3i6o4p7!

Un kur ir problēma? Tu gribēji, lai es evaluēju pret false un pēc noklusējuma agriežu true? Ko tas maina, pēc tavām domām? Un kapēc lai tas nebūtu valids numurs? :> Kuru gluži interesē, kā numurs tiek ievadīts, mērķis ir dabūt numuru. Jeb es kļūdos? Ķipa, "paroles laukā nedrīkst būt speciālie simboli" loģika? :>

Link to comment
Share on other sites

Nākošreiz, speciāli tev, sarakstīšu visu kodu maksimāli garā desā, koda tīrības labad, un paskatīsimies cik ilgi tev prasīs saprast kas tur īsti notiek. OP mums izskatās programmēšanas guru, viņam būs ļoti viegli saprast, kas tur sadrukāts. Nemaz nerunājot par to no pakaļas izvilkto "tīrāks kods" argumentu...

The universe doesn't always give you what you want. It gives you what you need.
Link to comment
Share on other sites

/^(\+{0,1}371\s{0,1}\d{8}|0{2}371\d{8}|\d{8})$/

 

opcionāls +, 371, opcionāla viena atstarpe, 8 cipari vai arī

divas 0, 371, 8 cipari vai arī

8 cipari.

 

ja vajag arī citu valstu, tad 371 aizvieto ar grupu kurā uzskaitīti atļauto valstu kodi (371|372|..|999), vai ja kods nav svarīgs, tad vnk \d{3}

Edited by v3rb0
Link to comment
Share on other sites

/^((\+|00)?(\d{3})?\s?\d{8,})$/

Ideja tāda pati kā v3rb0, tikai par valīdu tiks uzskatīts arī

00 371 12345678

Ja aizvāc to komatu pie \d{8,} tad varēs būt tikai 8 ciparu numurs, pretējā gadījumā tam jābūt vismaz 8 simboli.

Link to comment
Share on other sites

Reāli ir tolks baigi iespringt par to validāciju? Numuru prasa lietotāja interesēs. Pats vainīgs, ja norādīts nepareizu. Ok, tev vajag viņa pareizo numuru. Ko darīt, ja numurs valīds bet nederīgs? Efekts tas pats, kas ja vienkārši muļķības būtu ierakstītas.

 

Es darītu tā - izmetam visu, kas nav cipari, atstarpes, "+", normalizējam atstarpes (ja vairākas pēc kārtas, aizstājam ar vienu). Un skatamies,vai numurs nav par īsu, citādāk izmetam kļūdu.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...