2016-12-07 10 views
2

Это регулярное выражение должно позволить мне вводить числа с пространством в качестве разделителя тысяч, но некоторые из них также принимают алфавиты и специальные символы. Может кто-нибудь помочь мне с тем, что не так с регулярным выражением:Регулярное выражение для цифр и пробелов как разделитель тысяч

reg = new RegExp("^(?:\s*([0-9]* [0-9]{3})\s*)*$||[0-9]*"); 
+1

Это регулярное выражение соответствует любой строке. Какой шаблон вам нужен? Просьба указать некоторые данные для тестирования, объясните, какой результат вам нужно получить. –

+0

опубликовать ваши данные для соответствия – prasanth

+0

Входы могут быть как Действительны: «3000» «3 000» «3 000 000» –

ответ

0

Я думаю, что вы можете значительно упростить это регулярное выражение.

^[0-9 ]+$ 

Это соответствует номерам с пробелами или без них в качестве разделителя. Однако обратите внимание, что он будет соответствовать в любом месте (не только как разделитель тысяч). Хотя это должно быть достаточно легко настроить.

Редактировать: Вот еще одна альтернатива, которая заставляет пробелы отделять тысячи в числе.

^[0-9]{1,3}()\s?([0-9]{3}\s?)+$ 
+0

Это не работает. –

+0

Я тестировал его с помощью нескольких разных входов. –

+0

С каким входом это происходит? –

1

Группировка или кажется неправильным (также используйте |, не ||).

Попробуйте

new RegExp(
    "^(" //start of line 
    + "(?:" // number with thousands separator 
     + "[0-9]{1,3}" //1..3 digits once 
     + "(?: [0-9]{3})*?" //exactly 3 digits, preceded by space, any number of times 
    + ")" 
    + "|(?:" // or just number 
     + "[0-9]+" //any number of digits without spaces 
    + ")" 
    + ")$"); 

В зависимости или ваши потребности, вы можете разрешить или отклонить без трехзначные частей.

+0

Ваш шаблон проверяет '3000 000', который недействителен, и он не проверяет' 3 000 000', что действительно –

+0

да с той же проблемой :( –

+0

Да, thansk, я уже отредактировал – Dreamer