Регулярное выражение для отрицания приема чисел с ведущими нулями - PullRequest
0 голосов
/ 13 июля 2020

Итак, ниже приведена директива, которую я использую, чтобы убедиться, что ввод - это просто число от 0 до 9.

import { Directive, HostListener, ElementRef } from "@angular/core";

@Directive({
  selector: "[numbersOnly]",
})
export class OnlynumberDirective {
  constructor(private _el: ElementRef) {}

  @HostListener("input", ["$event"]) onInputChange(event) {
    const initalValue = this._el.nativeElement.value;

    this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, "");
    if (initalValue !== this._el.nativeElement.value) {
      event.stopPropagation();
    }
  }
}

На данный момент он разрешает только числа (без специальных символов), поскольку он выполняет очистку данных и заменяет нечисловые символы c пустым пространством. Теперь я хочу изменить свое регулярное выражение, чтобы числа, содержащие ведущие нули, не допускались. Он может иметь нули, но не только в начале.

  1. 90123 -> Принято
  2. 100001 -> Принято
  3. 01223 -> Не принято
  4. 0 -> Не принято

Пожалуйста, предложите мне регулярное выражение, которое может работать с этим.

Ответы [ 3 ]

2 голосов
/ 13 июля 2020

Вы можете использовать /\D|^0+/g для очистки данных следующим образом:

initalValue.replace(/\D|^0+/g, "");

На английском языке sh он говорит:

Найдите что-нибудь, кроме di git ( \D) или (|) ведущие нули (^0+) и заменить их ничем

console.log('90123'.replace(/\D|^0+/g, ""));
console.log('100001'.replace(/\D|^0+/g, ""));
console.log('01223'.replace(/\D|^0+/g, ""));
console.log('001223'.replace(/\D|^0+/g, ""));
console.log('0'.replace(/\D|^0+/g, ""));
0 голосов
/ 17 июля 2020

Или вы можете использовать

/^[^1-9]+/g

Ведущий ^ символ, который не ^ номер от 1 до 9

console.log('00090123'.replace(/^[^1-9]+/g, ""));
console.log('100001'.replace(/^[^1-9]+/g, ""));
console.log('01223'.replace(/^[^1-9]+/g, ""));
console.log('001223'.replace(/^[^1-9]+/g, ""));
console.log('0'.replace(/^[^1-9]+/g, ""));
0 голосов
/ 13 июля 2020

вы можете попробовать это

var str="90123 "
var str1="100001"
var str3="01223" 

pattern=/^0|D{1}\d+/g

console.log(str.replace(pattern,""))
console.log(str1.replace(pattern,""))
console.log(str3.replace(pattern,""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...