Sto cercando una RegEx per i prezzi. Quindi dovrebbero essere i numeri X davanti, che un "," e alla fine 2 numeri max.RegEx per i prezzi?
Qualcuno può supportarmi e postarlo per favore?
Sto cercando una RegEx per i prezzi. Quindi dovrebbero essere i numeri X davanti, che un "," e alla fine 2 numeri max.RegEx per i prezzi?
Qualcuno può supportarmi e postarlo per favore?
In che lingua hai intenzione di usarlo?
Dovrebbe essere qualcosa di simile:
^\d+(,\d{1,2})?$
analitico:
un numero X di fronte è: ^\d+
dove ^
significa l'inizio della stringa, \d
significa una cifra e +
significa uno o altro
Utilizziamo il gruppo ()
con un punto interrogativo, un ?
significa: matc h cosa c'è dentro il gruppo una o nessuna volta.
all'interno del gruppo c'è ,\d{1,2}
, il ,
è la virgola che hai scritto, \d
è ancora una cifra {1,2}
significa corrisponde alla cifra precedente una o due volte.
L'ultimo $
corrisponde alla fine della stringa.
^\d+,\d{1,2}$
il tuo è migliore. Sto cercando di ottenere decimali opzionali –
qualsiasi cosa come \ d +, \ d {2} è errato perché \ d corrisponde a [0-9 \.] Vale 12.34,1.
dovrebbe essere: [0-9] + [0-9] {2} (o [0-9] + [0-9] {1,2} per consentire luogo soltanto 1 decimale)
Quindi mi sono imbattuto in un problema simile, che ha bisogno di convalidare se una stringa arbitraria è un prezzo, ma ha bisogno di molta più resilienza rispetto alle espressioni regolari fornite in questo thread e molti altri thread.
avevo bisogno di un'espressione regolare che hanno tutte le seguenti:
E non per abbinare roba come indirizzi IP. Non riuscivo a capire una sola regex a che fare con la roba europea e non europea in un colpo solo così ho scritto un po 'di codice Ruby per normalizzare i prezzi:
if value =~ /^([1-9][0-9]{,2}(,[0-9]{3})*|[0-9]+)(\.[0-9]{1,9})?$/
Float(value.delete(","))
elsif value =~ /^([1-9][0-9]{,2}(\.[0-9]{3})*|[0-9]+)(,[0-9]{1,9})?$/
Float(value.delete(".").gsub(",", "."))
else
false
end
L'unica differenza tra le due regex è la cifra decimale scambiata e la virgola.Cercherò di abbattere ciò che questo sta facendo:
/^([1-9][0-9]{,2}(,[0-9]{3})*|[0-9]+)(\.[0-9]{1,9})?$/
La prima parte:
([1-9][0-9]{,2}(,[0-9]{3})*
Questa è una dichiarazione di numeri che seguono questa forma: 1.000 1.000.000 100 12. Ma non è così consentire gli zeri iniziali. È per i numeri correttamente formattati che hanno gruppi di 3 numeri separati dal separatore delle migliaia.
Seconda parte:
[0-9]+
Proprio Trova ogni numero 1 o più volte. Si potrebbe fare questo 0 o più volte se si desidera far corrispondere: .11 .34 .00 ecc
L'ultima parte:
(\.[0-9]{1,9})?
Questo è il posto po decimale. Perché fino a 9 numeri, chiedi? L'ho visto accadere. Questa regex dovrebbe essere in grado di gestire qualsiasi prezzo strano e meraviglioso che vede e ho visto alcuni rivenditori utilizzano fino a 9 cifre decimali nei prezzi. Di solito tutti gli 0, ma non vorremmo perdere i dati^_^
Speriamo che questo aiuti la prossima persona a venire avanti a dover elaborare stringhe di prezzo formattate arbitrariamente o in formato europeo o non europeo :)
\ d + ((, \ d +) +)? (. \ D +)? (. \ D +)? (, \ D +)?
per coprire tutte
5,00
1.000
1,000,000.99
5,99 (prezzo europeo)
5.999,99 (prezzo europeo)
0,11
0,00
Attualmente sto lavorando su una piccola funzione che utilizza espressioni regolari per ottenere quantità di prezzo all'interno di una stringa:
private static String getPrice(String input)
{
String output = "";
Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?");
Matcher matcher = pattern.matcher(input);
if (matcher.find())
{
output = matcher.group(0);
}
return output;
}
questo sembra funzionare con un piccolo prezzo (da 0,00 a 999,99) e varie valute:
$ 12,34 -> 12,34
$ 12,34 -> 12,34
$ 12,00 -> 12.00
$ 12 -> 12
12 € -> 12
12,11 € -> 12,11
12,999 € -> 12,99
12,9 € -> 12.9
£ 999,99 € -> 999,99
...
0.123.516,41 mila^[0-9] + [0-9] {2} $
qui è quella che consente di:.??
0,12, 12,01, ecc
e lo fa non consentire 12., 12.1, 19.0.0 ecc.
Non ero soddisfatto delle risposte precedenti. Ecco il mio prendere su di esso:
\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})
|^^^^^^|^^^^^^^^^^^^^|^^^^^^^^^^^|
| 1-3 | 3 digits | 2 digits |
|digits| repeat any | |
| | no. of | |
| | times | |
(ottenere una spiegazione dettagliata qui: https://regex101.com/r/cG6iO8/1)
copre tutti i casi al di sotto
Ma anche cose strane come
Nel caso in cui si desidera includere 5 e 1000 (Personalmente non mi piaceva abbinare TUTTI i numeri), quindi basta aggiungere un "?" così:
\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})?
Sto lavorando su un problema simile. Tuttavia voglio solo abbinare se un simbolo di valuta o una stringa è inclusa nella stringa come EUR, €, USD o $. Il simbolo potrebbe essere il trailing o il leader. Non mi interessa se c'è spazio tra il numero e la sottostringa della valuta. Ho basato la corrispondenza del numero nella discussione precedente e ho usato il numero di prezzo: \ d {1,3} (?: [.,] \ D {3}) * (?: [.,] \ D {2})?
Ecco risultato finale:
(USD|EUR|€|\$)\s?(\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}))|(\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})?)\s?(USD|EUR|€|\$)
Io uso (\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})?)\s?(USD|EUR|€|\$)
come un modello per abbinare contro un simbolo di valuta (in questo caso con tolleranza per uno spazio iniziale).Penso che si può facilmente modificarlo per eventuali altre valute
A Gist con l'ultima versione può essere trovato alla https://gist.github.com/wischweh/b6c0ac878913cca8b1ba
nessuna corrispondenza trovata per es. 1400,45 € o 12345 € -> https://regex101.com/r/LysWSP/2 –
Questo codice ha funzionato per me !! (PHP)
preg_match_all('/\d+((,\d+)+)?(.\d+)?(.\d+)?(,\d+)?/',$price[1]->plaintext,$lPrices);
Questo ragionevolmente funziona quando si può o non può avere parte decimale, ma una quantità spettacoli in questo modo 100.000 - o 100.000,00. Testato con Clojure solo
\ d {1,3} (:? [.,] \ D {3}) * (:? [.,] \ D {2,3})
Non ci sono valute là fuori che hanno bisogno di 3 cifre decimali, anche il dollaro e l'euro hanno bisogno di 3 cifre decimali in alcuni scenari. –
@AlixAxel Quando il dollaro e l'euro hanno bisogno di tre cifre dopo la virgola? – Tim
@TimN: AFAIK, tutti i paesi dell'UE devono calcolare i prezzi del gas con una precisione di 3 cifre. Un altro esempio: tassi di cambio Forex (5 posizioni decimali credo). –