Autor | Zpráva | ||
---|---|---|---|
frauen Profil * |
#1 · Zasláno: 2. 6. 2011, 19:27:21
Zdravím,
chtěl bych prosím poradit. Jak nejlépe ošetřit formulář - input pro telefonní číslo? Děkuji. |
||
panther Profil |
#2 · Zasláno: 2. 6. 2011, 20:27:05
frauen:
nastuduj si regulární výrazy (a když je budeš hledat, najdeš i ten na telefonní číslo). |
||
laijk Profil |
máš to napríklad tu: Regulární výraz pro telefon
|
||
frauen Profil * |
#4 · Zasláno: 2. 6. 2011, 23:06:08
Zkusil jsem:
<?php if (preg_match('^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$', 'Tel')) { echo 'Špatný formát telefonního čísla.'; } else { echo 'OK'; } ?> Vypisuje stále OK. V čem je prosím problém? |
||
laijk Profil |
#5 · Zasláno: 3. 6. 2011, 18:47:50
lebo tam nemáš negáciu, ak zadáš zlé číslo tak vypíše "OK", ak zadáš dobré vypíše "Špatný formát telefonního čísla."
uprav to takto: <?php if (!preg_match('^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$', 'Tel')) { echo 'Špatný formát telefonního čísla.'; } else { echo 'OK'; } ?> |
||
DarkMeni Profil * |
#6 · Zasláno: 3. 6. 2011, 19:04:06
1) Jako testovací řetězec nemáš proměnnou ale test který je 'Tel' takže to testuje ten řetězec.
2) Zkus to prohodit a nebo před preg_match dát vykřičník (negaci) Jinak já jsem se PHP učil na linuxsoftu a tam je na kontrolu s regulerními výrazy funkce ereg takže zkus třeba toto: <?php //skript... $tel = $_REQUEST["tel"]; //nevím jestli to posíláš getem nebo postem, tak request bere obojí if(eregi("^(+420)[0-9]{3}[0-9]{3}[0-9]{3}$",$tel)){ //Podpora formátu: +420xxxxxxxxx echo "OK"; }else{ echo "Špatný formát telefonního čísla!"; } //pokračování skriptu... ?> Nezkoušel jsem to ale mohlo by to fungovat. |
||
DarkMeni Profil * |
#7 · Zasláno: 3. 6. 2011, 19:07:09
Mohlo by se tam ještě přidat ještě toto kdyby tam uživatel náhodou napsal mezery:
<?php //skript... $tel = $_REQUEST["tel"]; //nevím jestli to posíláš getem nebo postem, tak request bere obojí $tel = eregi_replace(" ","",$tel); //tohle by mělo odstranit mezery if(eregi("^(+420)[0-9]{3}[0-9]{3}[0-9]{3}$",$tel)){ //Podpora formátu: +420xxxxxxxxx echo "OK"; }else{ echo "Špatný formát telefonního čísla!"; } //pokračování skriptu... ?> |
||
frauen Profil * |
#8 · Zasláno: 3. 6. 2011, 20:04:51
Zkoušel jsem i výše uvedená řešení, bohužel však nemůžu docílit správné funkčnosti.
Mám následující: <?php /** * Kontrola telefonního čísla * * Zdroj: http://www.regularnivyrazy.info/telefonni-cislo.html */ // Kontrola if (!preg_match('^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$', $_POST['phone'])) { $error = 'Špatný formát telefonního čísla.'; } // Error? if (isset($error)) { echo $error; } ?> Vstup: +420 123 456 789 Výstup: Špatný formát telefonního čísla. Vstup: 123 456 789 Výstup: Špatný formát telefonního čísla. Děkuji za pomoc. |
||
_es Profil |
#9 · Zasláno: 3. 6. 2011, 20:15:52
frauen:
Je vôbec toto overovanie formátu vhodné? Si si istý, že podchytíš naozaj všetky platné čísla? Nemáš záujem o návštevníkov s nečeským telefónnym číslom? Nestačí napríklad overenie, či tam sú len číselné znaky, znak + a medzery?
|
||
DarkMeni Profil |
#10 · Zasláno: 3. 6. 2011, 21:16:50
Jestli tam tu kontrolu teda chceš, a telefonní číslo bude při registraci nutné tak tento kód mi fungoval:
<?php //Header("Content-Type: text/html;charset=utf-8"); if(!isset($_POST["tel"])){ echo "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n</head>\n<title>Kontrola telefonního čísla</title>\n</body>\n"; echo "<form action='".$_SERVER["PHP_SELF"]."' method='POST' enctype='multipart/form-data'>\n"; echo "Telefonní číslo: <input type='text' name='tel' size='20' />\n"; echo "<input type='submit' value='Odeslat' />\n"; echo "</form>\n</body>\n</html>\n"; }else{ $tel = $_POST["tel"]; $tel = eregi_replace(" ","",$tel); if(eregi("^\+[0-9]{12}$",$tel)){ echo "OK<br />"; echo $tel; }else{ echo "Špatný formát telefonního čísla<br />"; echo $tel; } } ?> Kontrola forátu je nastavena na "+xxx xxx xxx xxx" bez mezer, ale i s mezerama, když tam bude plus a 12 čísel tak to bude platit jako platný formát, akorát ve výstupu bude bez mezer. |
||
_es Profil |
#11 · Zasláno: 3. 6. 2011, 21:29:02
DarkMeni:
„12 čísel“ Nemôže byť tých tých čísel 11 alebo 13? Neviem, len sa mi nezdá, že by 12 čísel bol jediný správny medzinárodný formát. |
||
DarkMeni Profil |
#12 · Zasláno: 3. 6. 2011, 21:58:56
No, myslim že víc než +999 tam nebude a když jich bude míň tak se k tomu dá nula (+099) ale kdyby náhodou tak se to dá upravit jako
if(eregi("^\+[0-9]{1,4}[0-9]{9}$",$tel)){...} a nebo nastavit jen několik možných států: if(eregi("^\+(420)|(421)|(422)|(423)[0-9]{9}$",$tel)){...} |
||
Marek88 Profil |
#13 · Zasláno: 3. 6. 2011, 22:06:45 · Upravil/a: Marek88
Nepoužíval bych funkci ereg (a jí podobné), ale preg_match, protože ereg od verze PHP 5.3.0 nefunguje.
Jinak podle mě je tohle kontrolování špatný způsob. Na prvním místě je (mělo by být) pohodlí uživatele a když tam to +420 na českých stránkách nenapíše, tak je snad jasné, že to tam patří. Pokud je tam předvolba důležitá, tak se tam dá programově doplnit a nebo je na ní lepší vyčlenit vlastní input (třeba i typu select s názvy zemí). A i těch děvet číslic by uživatel mohl zadat jako 800 11 22 33 a co pak? Zase ho budeš otravovat, ať dá ty mezery pryč? Pokud je to potřeba mít opravdu ve správném tvaru, tak je lepší ošetřit programově (dát pryč mezery, přidat předvolbu a podobně). |
||
Tori Profil |
#14 · Zasláno: 3. 6. 2011, 22:13:56 · Upravil/a: Tori
frauen [#2], laijk [#3]
Zásadní důvod, proč vám ten regulár s preg_match nefunguje, je ten, že chybí oddělovače. Funkce preg_* používají odlišnou syntaxi než ereg_*, tj. každý regulár musí být uzavřen do oddělovačů (typicky /, #, nebo ~), protože za ukončovacím oddělovačem můžou být ještě další modifikátory vyhledávání (malá/velká písmena apod.). Takže regulár z [#2] by měl vypadat např. takto: preg_match('/^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$/', $telefon) _es: „Nemôže byť tých tých čísel 11 alebo 13?“ I míň - např. v Dánsku jsou čísla běžně osmimístná (pevná linka i mobily), v menší zemi by asi mohla být i kratší. Zřejmě je definovaná jen maximální délka 15 číslic (Odkaz) |
||
panther Profil |
#15 · Zasláno: 3. 6. 2011, 22:30:17
Ještě dodám k úvaze správný meinárodní formát pro ČR, o kterém se nikdo nezmínil:
00420 123 456 789 (+ samozřejmě variace šestičíslí s jednou, dvěma nebo žádnou mezerou, atd.) |
||
Časová prodleva: 3 roky
|
|||
thak Profil * |
#16 · Zasláno: 19. 2. 2014, 08:23:40
Ještě to chce ošetřit fake čísla jako +420000000 nebo +420123456789 apod. prvni verzi pres str_split a pak array_unique a count array_unique nesmi byt 1 no a pak to další už jedině přes nějaké pole výskytů toho, co tam uživatelé nejvíc píšou.
|
||
Časová prodleva: 10 let
|
0