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:
Vedremo come si comporta questa nuova versione del validatore di numeri di telefono...
Post new comment