Регулярное выражение, сопоставляющее числовые значения с тысячными разделителями или без них

#regex

#регулярное выражение

Вопрос:

Мне нужно регулярное выражение, соответствующее следующему:

 1.234.567
-1.234.789
1234567
-1234567
  

Оно не должно совпадать:

 .123     (leading separator)
123..456 (two separators)
  

Другими словами, мне нужно регулярное выражение для сопоставления long числовых значений, отформатированных с разделителями в тысячу или без них.

Спасибо!

Комментарии:

1. Разделитель в тысячу всегда является точкой. ?

2. звучит немного как домашнее задание

3. Нет, это не домашнее задание. Я пытаюсь игнорировать недопустимые пользовательские вводимые данные из текстового поля в WPF.

Ответ №1:

Вот более ограниченный ответ

 ^-?(?!0)(?:d |d{1,3}(?:.d{3}) )$
  

Смотрите онлайн здесь, в Regexr

(?!0) предотвращает начало с 0

d позволяет использовать числа без разделителя

d{1,3}(?:.d{3}) это часть для разделителя. Начните с 1-3 чисел, затем разделитель и 3 числа. Точка для разделителя, за которой следуют 3 числа, может повторяться.

Комментарии:

1. Спасибо! 1 за предоставление более подробного описания.

Ответ №2:

Вы могли бы сделать что-то вроде

 ^-?([0-9]{1,3}.?) $
  

Демонстрация RegExr

Комментарии:

1. Спасибо! И 1 для ссылки на демонстрацию с примерами.

2. @Olav @bazmegakapa вы знаете, что это также соответствует 0.0.0 и 1.23.45 и 1. ?

3. @stema Я. Для проверки на стороне клиента этого достаточно. Ваше, конечно, лучше, но для меня немного излишне.

4. Пошел с ответом @ stema, поскольку он охватывает больше того, что я искал.