Использование регулярных выражений с методом замены Javascript - PullRequest
0 голосов
/ 20 апреля 2009

Друзья,

Я новичок в Javascript и Регулярных выражениях и надеюсь, что вы поможете!

Внутри функции Javascript мне нужно проверить, не появляется ли запятая (,) 1 или более раз. Если это так, то по обе стороны от него должно быть одно или несколько чисел.

, например

1000,00 в порядке

1 000,00 в порядке

, 000,00 не в порядке

1, 000,00 не в порядке

Если эти условия выполняются, я хочу удалить запятую, чтобы 1,000.00 стало 1000,00

То, что я пробовал, так это:

var x = '1,000.00';

var regex = new RegExp ("[0-9] +, [0-9] +", "g");

var y = x.replace (regex, "");

предупреждение (у);

При запуске предупреждение показывает «.00». Это не то, чего я ожидал или хочу!

Заранее благодарим за предоставленную помощь.

сильный текст редактировать сильный текст

Спасибо всем за ваш вклад и за 3 ответа. К сожалению, я не думаю, что объяснил свой вопрос достаточно хорошо.

Я пытаюсь достичь:

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

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

Итак, используя мои примеры сверху:

1,000.00 становится 1000.00

1,000,00 становится 100000

, 000,00 остается как, 000,00

1, 000,00 остается как 1, 000,00

Извиняюсь за путаницу!

Ответы [ 5 ]

4 голосов
/ 20 апреля 2009

Ваше регулярное выражение не будет очень гибким с более высокими заказами, чем 1000, и у него есть проблемы со входами, у которых нет запятой. Более проблематично, что вы также сопоставляете и заменяете часть данных, которая вас интересует!

Лучше иметь регулярное выражение, соответствующее формам, которые являются проблемой, и удалить их.

Следующие совпадения (по порядку) запятые в начале ввода, в конце ввода, с предшествующим числом не цифр или с последующим количеством не цифр.

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,'');

Кроме того, все это намного проще, если вам удается lookbehind , но почти каждая реализация JS этого не делает.

Редактировать на основе обновления вопроса:

Хорошо, я не буду пытаться понять, почему ваши правила такие, как они есть, но регулярное выражение становится проще для его решения:

var y = x.replace(/(\d),(\d)/g, '$1$2');
2 голосов
/ 20 апреля 2009

Я бы использовал что-то вроде следующего:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$
  • [0-9] {1,3}: от 1 до 3 цифр
  • (, [0-9] {3}) *: [Необязательно] Дополнительные тройки цифр, разделенные запятой
  • (\. [0-9] +): [Необязательно] Точка + дополнительные цифры

Если это регулярное выражение совпадает, вы знаете, что ваш номер действителен. Просто замените все запятые на пустую строку.

1 голос
/ 20 апреля 2009
// invalid cases:
// - standalone comma at the beginning of the string
// - comma next to another comma
// - standalone comma at the end of the string
var i,
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'],
    invalid_cases = /(^,)|(,,)|(,$)/;
for (i = 0; i < inputs.length; i++) {
    if (inputs[i].match(invalid_cases) === null) {
       // wipe out everything but decimal and dot
       inputs[i] = inputs[i].replace(/[^\d.]+/g, '');
    }
}
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]
1 голос
/ 20 апреля 2009

Я бы просто удалил все, кроме цифр и десятичного разделителя ([^0-9.]), и отправил бы вывод через parseFloat():

var y = parseFloat(x.replace(/[^0-9.]+/g, ""));
1 голос
/ 20 апреля 2009

Мне кажется, у вас есть три условия ошибки

  1. », 1000"
  2. "1000,"
  3. "1, 000"

Если какое-либо из этих значений истинно, вы должны отклонить поле. Если все они ложны, вы можете обрезать запятые обычным способом и двигаться дальше. Это может быть простое чередование:

^,|,,|,$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...