Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
855 views
in Technique[技术] by (71.8m points)

regex - Regular expression to match German number

I am wondering, how would regular expression for testing correct format of number for German culture would look like.

In German, comma is used as decimal mark and dot is used to separate thousands.

Therefore:

  • 1.000 equals to 1000
  • 1,000 equals to 1
  • 1.000,89 equals to 1000.89
  • 1.000.123.456,89 equals to 1000123456.89

The real trick, seems to me, is to make sure, that there could be several dots, optionally followed by comma separator

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This is the regex I would use:

^-?d{1,3}(?:.d{3})*(?:,d+)?$

Regular expression visualization

Debuggex Demo

And this is a code example to interpret it as a valid floating point (notice the parseFloat() after the string replacements).

Edit: as mentioned in Severin Klug's answer, the below code assumes that the numbers are known to be in German format. Attempting to "detect" whether a string contains a German format or US format number is not arbitrary and out of scope for this question. '1.234' is valid in both formats but with different actual values, without context it is impossible to know for sure which format was meant.

var numbers = ['1.000', '1,000', '1.000,89', '1.000.123.456,89'];

document.getElementById('out').value=numbers.map(function(str) {
  return parseFloat(str.replace(/./g, '').replace(',', '.'));
}).join('
');
<textarea id="out" rows="10" style="width:100%"></textarea>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...