Как удалить буквы, тире и знаки доллара в строке, используя регулярное выражение?
Я пытаюсь найти все буквы и тире и знаки доллара и удалить их из текстового поля.
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;
}
Я предупреждаю, чтобы определить, работает ли замена. Это не так.
Ответы
Ответ 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, "");
}