Espresso regolarmente

Printer-friendly versionInvia 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...

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Images can be added to this post.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.

intelliWARE news

intelliWARE a Start2Business, il 6-7 giugno nell'ambito di Research2Business in contemporanea con SMAU BUSINESS 2012 a Bologna.

Fri, 04/05/2012 - 19:54

AcquistiVerdi.it al panel sulla nuova imprenditorialità digitale.

Mon, 16/04/2012 - 16:56

Il WEB 2.0 va in montagna: è iniziato il corso a Forno di Zoldo.

Fri, 13/04/2012 - 11:06

contact us

intelliWARE snc
via Borgo
dei Leoni 132
44121 Ferrara
Italia
mappa

telefono
0532 1860611

web
www.i-ware.it

email
info@i-ware.it

Languages

partner

ferraraterraeacqua