Espresso regolarmente

Versione stampabileInvia ad un amicoPDF version

Ho apportato la mia prima modifica ad un modulo. Niente di straordinario, ma quel campo cck che doveva semplicemente ricevere un numero di telefono in un form di registrazione non ne voleva proprio sapere di funzionare. Gli issues nel modulo Phone sono numerosi e non mi sembra che sia mantenuto benissimo. Da una breve domanda sul forum di drupal italia per vedere chi altri avesse riscontrato il problema ho ricevuto questa risposta.

Pare che ci fosse qualcosa di strano in questa espressione regolare per validare il formato del numero di telefono:

"/^(0([1345789][0159]|(37|54|73|96)[1234567]|(12|17|34|38|46|52|57|78|8[678]|
9[2378])[12345]|(14|32|47)[1234]|(18|36|53|57|77|82)[345]|(33|72|83|94)[12]|
1(31|6[1356]|8[27])|2|3(46|62|86)|4([23][123456789]|4[245]|81)|5([368]6|32|
6[45]|[78][78]|8[345])|6|7(4[2346]|6[1356]|7[16]|89)|8(2[78]|3[356])|
968|976)\/[1-9]|3([234][03789]|3[456]|46|6[0368]|8[0389]|9[0123])\/)[0-9 -]+[0-9]$/i"

e mi viene suggerito di sostituirla con una più semplice:

"/^(\+39\s){0,1}(0[1-9]{1,3}|3[0-9]{2,})\s[0-9]{5,9}$/"

Neanche quest'ultima funziona... in un primo momento. Ma basta andarsi a ripassare le REGEX (regular expression), ad esempio a questo indirizzo, per capire che modificando un po' qua e un po' là si può ottenere qualcosa di funzionante.
Ecco l'espressione che valida i numeri che ho composto alla fine di questo percorso:

"/^(\+39\s*){0,1}(0[1-9]{1,3}|3[0-9]{2,})\s*[0-9]{5,9}$/";

Semplicemente, aggiungendo gli asterischi dopo le s si dice che gli spazi possono esserci come non esserci e quindi "+390532..." sarà valido tanto quanto "+39 0532 90...".

Un piccolo passo per me ma nello spulciare le funzioni del modulo, i file che lo componevano ecc... un passo in più verso la scoperta dei segreti di questo CMS.

Com'era

Ps. Ecco come era dall'ultimo aggiornamento del modulo phone:

$regex = "/^(\+39)?[ ]?([0-9]{2,3}(\/|-| )?[0-9]{6,7})$/i";

Flessibilità

Oggi, ad un anno e mezzo dalla stesura di questo post c'è bisogno di permettere più flessibilità a quel campo che deve poter accettare anche numeri stranieri, cellulari, numeri corti e lunghi... Usando la stessa guida linkata nel post (è destino che ogni tanto mi rinfreschi l'argomento) e questo comodo test online per regex ho generato qualcosa di questo tipo:

(\+39)?[ ]?([0-9]{2,5}){0,1}[ ]?[\/|-]?[ ]?[0-9]{4,12}

In pratica accetta:

  • una o zero occorrenze del "+39",
  • spazi a piacere,
  • da 2 a 5 cifre decimali opzionali (nella mia idea dovrebbe essere un prefisso),
  • spazi a piacere,
  • una barra a scelta tra "/" e "-" (ma anche nessuna delle due)
  • spazi a piacere,
  • dalle 4 alle 12 cifre decimali

Vedremo come si comporta questa nuova versione del validatore di numeri di telefono...

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Linee e paragrafi vanno a capo automaticamente.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Images can be added to this post.

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Questa domanda è per capire se tu sei un visitatore umano o un bot.
Image CAPTCHA
Enter the characters shown in the image.

intelliWARE news

Pubblicato il Open Source CMS Market Share Report.

Gio, 15/12/2011 - 11:55

Corso di comunicazione e gestione delle promozioni online a Calalzo di Cadore (BL).

Mer, 14/12/2011 - 09:48

Corso di Fidelizzazione online a Santo Stefano di Cadore (BL).

Lun, 21/11/2011 - 10:51

contatti

intelliWARE snc
via Borgo
dei Leoni 132
44121 Ferrara
Italia
mappa

web
www.i-ware.it

email
info@i-ware.it

lingue

partner

ferraraterraeacqua