Подтвердить что ты не робот

Как удалить буквы, тире и знаки доллара в строке, используя регулярное выражение?

Я пытаюсь найти все буквы и тире и знаки доллара и удалить их из текстового поля.

function numbersOnly()
{
    if ($('.sumit').val().indexOf([A-Za-z-$])) {
        $('.sumit').val().replace([A-Za-z-$], "");
    }
}

Это то, что у меня есть, и я уверен, что это неправильно. Я не слишком хорош с регулярными выражениями, но я пытаюсь их изучить. Кто-нибудь хочет помочь мне и начать с выполнения этой функции?

Итак.. У вас есть входные данные.

<div class="numInputRight"><input type="text" class="sumit" name="sumAmount1"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount2"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount3"></div>

Затем у вас есть функция:

numbersOnly = function()
{
  $('.sumit').val().replace(/[A-Za-z$-]/g, "");
  alert($('.sumit').val());
  return false;
}   

Я предупреждаю, чтобы определить, работает ли замена. Это не так.

4b9b3361

Ответ 1

Марк делает это для всех нецифровых. Если вы хотите только вытаскивать буквы, тире и $, (но, например, оставляя десятичные знаки), эта модификация для вашего оригинала должна сделать это:

$('.sumit').val().replace(/[A-Za-z$-]/g, "");

(И я лично предпочитаю обновленный ответ Марк по той же причине, что и он, вы поймаете все, что вы не можете предсказать таким образом.)

Для вашего обновленного вопроса причина, по которой значения не меняются, заключается в том, что val() возвращает новую строку. Это не изменит фактическое значение. Для этого попробуйте:

$('.sumit').each(function() { 
    $(this).val($(this).val().replace(/[A-Za-z$-]/g, "")); 
});
alert($('.sumit').val());

Я также сделал это в каждом вызове(), чтобы каждый элемент выполнялся индивидуально.

Ответ 2

Это должно сделать это

$('.sumit').val().replace(/[^\d.]/g, "");

[^] - это отрицательный класс символов, поэтому он будет соответствовать всем символам , кроме, указанным в классе символов.

В этом случае наш класс символов \d (который является числом 0-9) и периодом (для допуска десятичных чисел).

Я предпочитаю этот подход, потому что он поймает что-либо, а не числовое, а не беспокоится о явном перечислении нечисловых символов, которые я не хочу.

Если вы действительно хотите исключить буквы, $и -, то ответ Шона - лучший способ пойти.

Ответ 3

Мне очень нравится ответ Марка. Тем не менее, в зависимости от вашего языка программирования (и механизма RegEx) \d соответствуют символы типа 4 или 8, которые цифры UTF-8.

Итак, если вам нужны только цифры от 0 до 9, используйте [^0-9.]:

$('.sumit').val().replace(/[^0-9.]/g, "");

Это еще быстрее, если ваш движок RegEx поддерживает UTF-8. Пример Язык, где это применимо, - python3 (http://docs.python.org/3/library/re.html - поиск "\d" ). Тем не менее, стандарт ECMA говорит, что для JavaScript \d равно [0-9].

Ответ 4

$('.sumit').val().replace(/\D/g, "");

Заменяет все нецифровые значения от значения sumit

Ответ 5

Это сработало для меня:

$('.sumit').val().replace(/[^\d]/g, "");

Я попробовал Майка ответить со столицей \D вместо того, чтобы отрицать a\d, что по какой-то причине не удаляло скобки и другую пунктуацию для меня. Отрицание \d отлично работает.

Если вы хотите сохранить десятичные знаки, возможно, поместите в квадратные скобки точку и другие символы.

PS Среда, в которой я тестировалась, была Titanium SDK.

Ответ 6

Попробуйте что-то вроде этого:

function numbersOnly()
{
    $('.sumit').val().replace(/[\w-$]/g, "");
}