15.08.2015, 12:29
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Как изменить регулярное выражение, чтобы принимало минус и плюс
Не силен я в регулярке. Да и очень редко использую. Тормозная она.
Как вот это выражение дополнить, чтобы кроме цифр, точки и запятой допускало бы еще и ведущие "+" (что не особо надо) и "-" (обязательно):
function isnumber(inp) {
inp.value = inp.value.replace(/[^\d,.]*/g, '')
.replace(/([,.])[,.]+/g, '$1')
.replace(/^[^\d]*(\d+([.,]\d{0,5})?).*$/g, '$1');
}
|
|
15.08.2015, 14:09
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от Rise
|
Эдди, что за числа такие, как для первоклашек, с разделителями разрядов?)
|
А в JS я и есть первоклашка. Потому и спрашиваю.
Спасибо. Проверяю.
|
|
16.08.2015, 10:02
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от Rise
|
Эдди, есть встроенная функция проверки на число (без разделителей разрядов тока):
alert(isFinite('-1.234'));
alert(isFinite('-1.a234'));
|
Оно-то хорошо, когда уже есть готовое число с ведущим минусом.
А если в инпут начинаешь вводить "-" и перехватываешь по onKeyUp то минус без цифры не воспринимается числом и, соответственно, удаляется.
Ну с запятой вместо точки можно разобраться - val = val.replace(',','.');
А с минусом как?.. Упсссс...
По тупому убирать его до проверки, а потом добавлять? Топорно будет...
Хотя работать, наверное, будет быстрее регулярного выражения...
Последний раз редактировалось Эдди, 16.08.2015 в 12:00.
Причина: Добавил абзац.
|
|
16.08.2015, 15:08
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
<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>
|
|
16.08.2015, 15:13
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от Poznakomlus
|
<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>
|
Запятую не принимает!
Да и точку тоже.
|
|
16.08.2015, 15:33
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
<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>
|
|
16.08.2015, 15:38
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от Poznakomlus
|
<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>
|
Вот спасибо. Наконец, минус принимает.
Хотя не принимает запятую, но с этим я сам разберусь.
|
|
16.08.2015, 15:42
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от Эдди
|
Хотя не принимает запятую
|
так я же заменил запятую на строчку
this.value = this.value.replace(',', '.');
А минус и в первом варианте принимал. Единственно что он не понимал в первом это числа типа -.54
|
|
18.08.2015, 17:52
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от Poznakomlus
|
<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>
|
Вот это другое дело ! Не проверял на своем скрипте, но, думаю, все будет ок. Спасибо.
|
|
19.08.2015, 09:51
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Эдди
|
Тормозная она.
|
Это голословное обвинение...
|
|
|
|