Как изменить регулярное выражение, чтобы принимало минус и плюс
Не силен я в регулярке. Да и очень редко использую. Тормозная она.
Как вот это выражение дополнить, чтобы кроме цифр, точки и запятой допускало бы еще и ведущие "+" (что не особо надо) и "-" (обязательно):
function isnumber(inp) {
inp.value = inp.value.replace(/[^\d,.]*/g, '')
.replace(/([,.])[,.]+/g, '$1')
.replace(/^[^\d]*(\d+([.,]\d{0,5})?).*$/g, '$1');
}
|
Цитата:
Спасибо. Проверяю. |
Цитата:
А если в инпут начинаешь вводить "-" и перехватываешь по onKeyUp то минус без цифры не воспринимается числом и, соответственно, удаляется. Ну с запятой вместо точки можно разобраться - val = val.replace(',','.'); А с минусом как?.. Упсссс... По тупому убирать его до проверки, а потом добавлять? Топорно будет... :) Хотя работать, наверное, будет быстрее регулярного выражения... |
<input type="text" value="" id="test">
<script>
test.oninput = test.onkeyup = inputFloat;
function inputFloat() {
this.value = this.value.replace(',', '.');
if (this.value != '-' && !isFinite(this.value)) {
this.value = parseFloat(this.value) || this.value.slice(0, -1);
}
}
</script>
|
Цитата:
Да и точку тоже. |
<input type="text" value="" id="test">
<script>
test.oninput = test.onkeyup = inputFloat;
function inputFloat() {
this.value = this.value.replace(',', '.');
if (!/^-?\.?$/.test(this.value) && !isFinite(this.value)) {
this.value = parseFloat(this.value) || this.value.slice(0, -1);
}
}
</script>
|
Цитата:
Хотя не принимает запятую, но с этим я сам разберусь. :) |
Цитата:
this.value = this.value.replace(',', '.');
А минус и в первом варианте принимал. Единственно что он не понимал в первом это числа типа -.54 |
Цитата:
|
Цитата:
|
Цитата:
Поэтому сам не тестировал, но везде так пишут. Я и поверил. А разве нет? А давайте, я проверю. Вы, если можно, добавьте минус в скрипт, который первый в этой теме. А я сравню скорость этого скрипта со скоростью того, который привел чуть выше Poznakomlus... |
Цитата:
[+|-]<числа>[.<числа>] |
Цитата:
Можно вводить только минус (может, плюс, что не важно, потому что без минуса, понятно, что плюс), запятую, точку. |
Цитата:
Моя запись верна или нет, вот что требовалось. Как вариант
var re=/^[+-]?\d+([\.\,]\d+)?$/;
alert(re.test('12345'));
alert(re.test('+12345,123'));
alert(re.test('-12345'));
alert(re.test('12345.'));
alert(re.test('12345.123'));
|
Цитата:
Случаи разные бывают. Допускаю, что неудачная регулярка или некая ситуация даст проигрыш регулярному выражению, в сравнении с альтернативными решениями... Но возможности регулярок меня лично поражают. Являясь нативным действием регулярка обязана оперержать по быстродействию другие альтернативные действия и алгоритмы... |
| Часовой пояс GMT +3, время: 10:36. |