[rails] problema validazione dati con regexp

sto implementando un gestionale di locations dove ho predisposto anche
i campi “latitude” e “longitude”. in tali campi verranno inseriti dei
numeri nel formato “xx.xxxx” oppure lasciati vuoti.
per tale scopo ho aggiunto questo nel model:

validates_format_of :latitude, :with => /^\d{1,3}.\d{4}$|^$/, :message
=> " può contenere numeri in questo formato: 000.0000"
validates_format_of :longitude, :with => /^[0-9]{1,3}.[0-9]{4}$|^$/,
:message => " può contenere numeri in questo formato: 000.0000"

ho notato però che la regexp non “filtra bene gli errori”: infatti se
inserisco un valore con l’ ultima cifra terminante per “0” non mi
accetta il valore.

ho provato quindi a testare la regexp con textmate su dei testi dove ho
inserito dei dati soddifacenti al pattern, ma in questo caso l’ editor
mi trova correttamente anche i valori terminanti con “0”.

Come posso risolvere la corretta validazione anche degli zeri finali?

On Sep 1, 2008, at 3:26 PM, Aldo I. wrote:

validates_format_of :latitude, :with => /^\d{1,3}.\d{4}$|^$/, :message
> => " può contenere numeri in questo formato: 000.0000"
> validates_format_of :longitude, :with => /^[0-9]{1,3}.[0-9]{4}$|^$/,
> :message => " può contenere numeri in questo formato: 000.0000"

Ciao, non sono un esperto di Ruby e Rails, ma se quella Regexp va
letta come una Regexp in Perl… mi sembra ci siano degli errori:

l’operatore . significa qualsiasi carattere, se vuoi usarlo come
“punto” devi escaparlo con \ (.)

non capisco il |^$ finale, dovrebbe signficare “oppure una riga vuota”?

In io farei:

/^[0-9]{1,3}.[0-9]{4}$/

che ne pensate?

In irb:

regexp = /^[0-9]{1,3}.[0-9]{4}$/
subject = “100.3492”

irb(main):027:0> puts “success” if subject =~ regexp
success
=> nil

e se faccio:

subject = “100.3400”
irb(main):031:0> puts “success” if subject =~ regexp
success
=> nil

che mi sembra sia quello che cerchi…

Inoltre:

subject = “100.34”
puts “success” if subject =~ regexp
=> nil

Ciao!

P.S: domanda agli amministratori, la mia risposta verra’ postata nel
forum? visto che risponde a una mail che arriva dal forum?

Tucano wrote:

l’operatore . significa qualsiasi carattere, se vuoi usarlo come
“punto” devi escaparlo con \ (.)

hai ragione, adesso ho corretto

non capisco il |^$ finale, dovrebbe signficare “oppure una riga vuota”?

proprio così

il risultato purtroppo è lo stesso di prima: non mi accetta valori con
lo zero sulla cifra finale.
grazie.