HighDots Forums  

espressione regolare

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss espressione regolare in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Marco
 
Posts: n/a

Default espressione regolare - 05-07-2008 , 04:50 AM






Salve a tutti, premetto che sono alle prime armi con javascript
ma per necessità ho dovuto creare un'espressione regolare che
accettasse solo caratteri alfabetici per il cognome dell'utente:

var espressione = /^([a-zA-Z]{2,})+(\s*)+(([a-zA-Z]{2,})*)+(\s*)+
(([a-zA-Z]{2,})*)+$/;

il problema è che in questo modo la l'utente può inserire fino a
tre parole ma nel caso (poco probabile) che il suo cognome fosse
composto da più di tre parole, la funzione restituisce
giustamente errore! Come si può fare in modo che l'utente possa
inserire anche 10 parole senza che la funzione mi va in errore?
io avevo provato questo ma non ha funzionato:

var espressione = /^( ([a-zA-Z]{2,}+(\s*)) {1,})+$/;

dove sbaglio? qualcuno mi sa aiutare?

grazie in anticipo!

Marco
--
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!

Reply With Quote
  #2  
Old   
ZER0
 
Posts: n/a

Default Re: espressione regolare - 05-07-2008 , 05:20 AM






On Wed, 07 May 2008 08:50:29 GMT, Marco wrote:

Quote:
Salve a tutti, premetto che sono alle prime armi con javascript
ma per necessità ho dovuto creare un'espressione regolare che
accettasse solo caratteri alfabetici per il cognome dell'utente:
[cut]
il problema è che in questo modo la l'utente può inserire fino a
tre parole ma nel caso (poco probabile) che il suo cognome fosse
composto da più di tre parole, la funzione restituisce
giustamente errore!
Un consiglio, lascia perdere questo genere di cose. Verifica al più
che si tratti di lettere, ma poco altro. Ci sono tanti di quei casi
che cercare di coprirli tutti ha poco senso. Anche perché per farlo
bene, si va a scrivere un'espressione regolare che è più incasinata
del problema che va a risolvere. Inoltre, essendo un controllo lato
client, è aggirabile senza neanche troppa fatica.

Per farti degli esempi, la tua regexp non contempla casi tipo:

Tim O'Reilly
Micheal J. Fox
Mahar Raymond C

Per non parlare di casi in cui gli utenti usino caratteri asiatici,
ma presumo che i tuoi utenti non rientrino in questa categoria.

In ogni caso:

Quote:
var espressione = /^( ([a-zA-Z]{2,}+(\s*)) {1,})+$/;
Così su due piedi mi verrebbe da ridurla così:

/^([a-zA-Z]{2,} ?)+$/;

Quote:
dove sbaglio? qualcuno mi sa aiutare?
IMHO, credo che ti siano poco chiari i quantificatori. Ti consiglio
una lettura alla sintassi delle RegExp:

<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Regular_Expressions>

Quote:
grazie in anticipo!
Hope it helps.

--
~ L'intelligenza artificiale non può battere la stupidità naturale.
(Lemma di Sullivan)



Reply With Quote
  #3  
Old   
Marco
 
Posts: n/a

Default Re: espressione regolare - 05-07-2008 , 08:17 AM



ZER0 ha scritto:
Quote:
Un consiglio, lascia perdere questo genere di cose.
Verifica al più
che si tratti di lettere, ma poco altro.
Come posso strutturare una funzione regolare che mi accetti le
lettere apostrofi e spazi?


Quote:
Inoltre, essendo un
controllo lato
client, è aggirabile senza neanche troppa fatica.
in che modo? è davvero cosi semplice?


grazie per la risp,
Marco
--
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!


Reply With Quote
  #4  
Old   
ZER0
 
Posts: n/a

Default Re: espressione regolare - 05-07-2008 , 08:46 AM



On Wed, 07 May 2008 12:17:30 GMT, Marco wrote:

Quote:
Un consiglio, lascia perdere questo genere di cose.
Verifica al più
che si tratti di lettere, ma poco altro.

Come posso strutturare una funzione regolare che mi accetti le
lettere apostrofi e spazi?
Li spazi erano già contemplati, dovresti aggiungere (per le casistiche
che ti ho mostrato) quantomeno punto e apostrofo (ammesso che non vada
a considerare l'ultima caso, quello di una lettera singola). La cosa è
in sè abbastanza banale, basta aggiungerlo alla lista dei caratteri, e
invece di:

[a-zA-Z]

Avrai:

[a-zA-Z\.']

Il punto è che nulla vieta che si vadano a scrivere valori come:

'' .. AA

Che ovviamente non ha molto senso.
Certo, puoi fare una regexp più complessa per una gestione un poco più
mirata di quei caratteri, ma IMVHO non è un gioco che vale la candela.
Quel che vorrei farti capire, è che ci sono cose per le quali ha senso
perder del tempo mentre altre no, al di là della regexp in sé.

Quote:
Inoltre, essendo un
controllo lato
client, è aggirabile senza neanche troppa fatica.

in che modo?
In un godziliardo di modi diversi.
Disabilitando JS, tanto per iniziare. Eseguendo codice JS nell'URL del
browser tramite lo pseudo-protocollo "javascript:". Oppure, utilizzare
uno dei debugger che ci sono a giro (Firebug in primis, e ora anche il
Dragonfly di Opera, per non dimenticare lo Script Debugger di MS). Poi
va visto anche dov'è che fai tale controllo, se nel submit di una form
o nell'evento onkeypress/down/up o onblur del campo di testo.
In base a questo si può aggirare anche in altri modi.

Lato client, come più volte è stato scritto, ha senso se si realizzano
"facilities", ovvero qualcosa che aiuti e guidi l'utente. I controlli,
sono opzionali in quanto aggirabili (un utente che aggira qualcosa che
lo aiuta è masochista), vanno fatti lato server.

Quote:
grazie per la risp,
Marco
De nada.


--
~ "L'amore è la risposta.
Ma mentre aspetti la risposta,
il sesso fa nascere alcune buone domande."
(Woody Allen)



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.