Domanda

Sto cercando di trovare un pezzo di regex per abbinare un valore in valuta.

Vorrei abbinare solo numeri e 1 punto decimale, ad esempio

ammessi

  • 10
  • 100
  • 100.00

Non consentito

  • Personaggi alfa
  • 100,00
  • +/- 100

Ho cercato e provato un bel po 'senza fortuna.

Spero che tu possa consigliarti

È stato utile?

Soluzione

if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

Nota a margine : se vuoi limitare il numero di decimali che desideri, puoi fare qualcosa del genere:

/^[0-9]+(?:\.[0-9]{1,3})?$/im

100.000

corrisponderà, mentre

100.0001

solito.

Se hai bisogno di ulteriore aiuto, pubblica un commento.

PS Se puoi, usa il formattatore dei numeri pubblicato sopra. Le funzioni native sono sempre migliori (e più veloci), altrimenti questa soluzione ti servirà bene.

Altri suggerimenti

Che ne dici di questo

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}

Potresti prendere in considerazione altre alternative all'utilizzo di una regex.

Ad esempio, c'è il NumberFormatter classe, che fornisce il numero e la valuta flessibili analisi e formattazione , con supporto integrato per l'internazionalizzazione.

È integrato in PHP 5.3 e versioni successive ed è disponibile come estensione nelle versioni precedenti di PHP 5.

Prova questa espressione regolare:

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top