# \[rails\] problema validazione dati con regexp

**URL:** <https://www.ruby-forum.com/t/rails-problema-validazione-dati-con-regexp/147406>\
**Category:** IT\
**Created:** [September 1, 2008, 3:26pm UTC](https://www.ruby-forum.com/t/rails-problema-validazione-dati-con-regexp/147406 "2008-09-01T15:26:51Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [September 1, 2008, 3:26pm UTC](https://www.ruby-forum.com/t/rails-problema-validazione-dati-con-regexp/147406/1 "2008-09-01T15:26:51Z")

</div>

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:

```auto
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?

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [September 1, 2008, 5:30pm UTC](https://www.ruby-forum.com/t/rails-problema-validazione-dati-con-regexp/147406/2 "2008-09-01T17:30:20Z")

</div>

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

> ```auto
> 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?

---

<div class="post-metadata">

**Author:** ![aldoitalo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a587f6/32.png) [@aldoitalo](https://www.ruby-forum.com/u/aldoitalo)\
**Post date:** [September 1, 2008, 5:50pm UTC](https://www.ruby-forum.com/t/rails-problema-validazione-dati-con-regexp/147406/3 "2008-09-01T17:50:42Z")

</div>

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.
