регулярное выражение: удалить ведущие нули, но оставить один ноль - PullRequest
2 голосов
/ 03 марта 2020

У меня есть поле ввода, к которому я привязал функцию форматирования, которая срабатывает всякий раз, когда поле теряет фокус.

Я стремлюсь к тому, чтобы удалить все начальные нули из ввода, и я сделал это. добиться этого с помощью следующей строки. Однако, когда пользователь хочет ввести один 0 или что-то вроде 0000, я все же хочу, чтобы это поле заканчивалось значением 0 (одиночным). С .replace(/^0+/, '') он удалит каждый ноль и вернет просто пустую строку. Кто-то знает, какое регулярное выражение может с этим справиться?

const formatNumber = ($field) => {
var number = $field.val().replace(/\./g, '').replace(/\s/g, '').replace(/^0+/, '');
return number;
};

note : if(number === "") number = "0" не вариант.

edit1: : я заметил там, кажется, немного путаницы. Например, «0009825» должно стать 9825, а не 09825. Единственный случай, когда я хочу, чтобы 0 был в начале, это когда значение просто равно нулю.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

A простой регистр exp с ведущими нулями и соответствием одному ди git в группе захвата

const cleanZeros = str => str.replace(/^0+(\d)/, '$1')


var tests = ["0009876","0", "0000", "9999", "0090000"]
tests.forEach( s => console.log(s, cleanZeros(s)))
2 голосов
/ 03 марта 2020

Вы можете использовать эту замену регулярных выражений:

.replace(/^(?:0+(?=[1-9])|0+(?=0$))/mg, '')

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

Подробности RegEx:

  • ^: начало
  • (?:: начало группы захвата
    • 0+(?=[1-9]): совпадение 1 или более нулей, за которыми следует 1-9
    • |: ИЛИ
    • 0+(?=0$): соответствует 1 или более нулям, после которых должен стоять один 0 и конец
  • ): конец группы захвата

Замена - пустая строка, которая оставляет одну 0, если в строке есть только нули, в противном случае удаляются ведущие нули.


Альтернативное решение с использованием группа захвата:

str = str.replace(/^0+(0$|[1-9])/mg, '$1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...