Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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');
}
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2015, 14:09
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от Rise Посмотреть сообщение
Эдди, что за числа такие, как для первоклашек, с разделителями разрядов?)
А в JS я и есть первоклашка. Потому и спрашиваю.
Спасибо. Проверяю.
Ответить с цитированием
  #3 (permalink)  
Старый 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. Причина: Добавил абзац.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2015, 15:08
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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>
Ответить с цитированием
  #5 (permalink)  
Старый 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>
Запятую не принимает!
Да и точку тоже.
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2015, 15:33
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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>
Ответить с цитированием
  #7 (permalink)  
Старый 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>
Вот спасибо. Наконец, минус принимает.
Хотя не принимает запятую, но с этим я сам разберусь.
Ответить с цитированием
  #8 (permalink)  
Старый 16.08.2015, 15:42
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Эдди
Хотя не принимает запятую
так я же заменил запятую на строчку
this.value = this.value.replace(',', '.');

А минус и в первом варианте принимал. Единственно что он не понимал в первом это числа типа -.54
Ответить с цитированием
  #9 (permalink)  
Старый 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>
Вот это другое дело ! Не проверял на своем скрипте, но, думаю, все будет ок. Спасибо.
Ответить с цитированием
  #10 (permalink)  
Старый 19.08.2015, 09:51
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Эдди
Тормозная она.
Это голословное обвинение...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать выпадающий список, чтобы второй зависил от значения первого???? zsaz jQuery 2 16.07.2010 20:12
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 21:22
Как можно изменить URL в адресной строке браузера? балерун Events/DOM/Window 12 17.11.2009 13:08
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24