Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Regexp для валидации значения в Input (https://javascript.ru/forum/angular/77171-regexp-dlya-validacii-znacheniya-v-input.html)

ar4ipers 02.04.2019 13:40

Regexp для валидации значения в Input
 
Здравствуйте, не могу додумать регулярку, которая разрешала бы ввод 0, но запрещала 01, 000, 02234 и так далее, но при этом можно было бы ввести 10 или 1000 или 12000
<input type="text"
                       class="cell-data"
                       ng-model="cell.par"
                       ng-change="setValidParValue()">

$scope.setValidParValue = function () {
                $scope.cell.par = $scope.cell.par.replace(/[^0-9]/g, '').replace(/(^[0]$)/, '');
            }

чет не могу додумать как правильно переписать /(^[0]$)/, может есть у кого идеи?

рони 02.04.2019 14:20

ar4ipers,
replace(/^(?:0+)/, '')

Dilettante_Pro 02.04.2019 14:21

<input type="text" onchange="setValidParValue(this)">
<script>
function setValidParValue(elem) {
      elem.value = Number.parseInt(elem.value.replace(/[^0-9]/g, '')).toString();
}
</script>

ar4ipers 02.04.2019 14:51

рони,
Спасибо, пробовал так же, но в таком кейсе я не смогу ввести просто 0

laimas 02.04.2019 14:57

elem.value = elem.value.replace(/^0|\D/,'')

ar4ipers 02.04.2019 15:04

Спасибо, так же пробывал, но просто 0, я не смогу ввести, с данным условием я смогу ввести 10, 1000 и т.д, но не смогу ввести всё что начинается с нуля, хотя просто 0 нужно вводить. Т.е. кейсы 01, 000 невалидные, а кейсы 0, 100, 10 валидные

laimas 02.04.2019 15:06

То есть нельзя первый ноль если второй знак не ноль, но можно если все ноли или один ноль?

elem.value = elem.value.replace(/^0(?=[1-9])|\D/,'')

ar4ipers 02.04.2019 15:12

несовсем
10 - валидный кейс
0 - валидный кейс
01 - невалидный кейс
00 - невалидный кейс
00001 - невалидный кейс
первый ноль можно всегда, нельзя после него что-то добавлять, и вот как данное условие регуляркой описать, не знаю :(

Dilettante_Pro 02.04.2019 15:18

ar4ipers,
А обязательно только регулярка?
Этот вариант
Number.parseInt(elem.value.replace(/[^0-9]/g, '')).toString();

не подходит?
Выдает все валидные кейсы

laimas 02.04.2019 15:27

replace(/^0(?=\d)|\D/,'')


Часовой пояс GMT +3, время: 14:20.