У меня есть код, позволяющий вводить только цифры и буквы:

        if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
            this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
        }

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

0
Redbox 10 Янв 2013 в 20:44
Вы хотите удалить все символы, кроме + и -?
 – 
Chetter Hummin
10 Янв 2013 в 20:47
Здесь вам не нужно условие if. В любом случае замена не будет произведена, если не будет хотя бы 1 совпадения.
 – 
inhan
10 Янв 2013 в 20:52

1 ответ

Лучший ответ

Вы можете добавить эти символы в набор символов и удалить те, которые теперь хотите удалить. Однако здесь символ - имеет особое значение и должен быть экранирован следующим образом:

    if (this.value.match(/[^+\-]/g)) {
        this.value = this.value.replace(/[^+\-]/g, '');
    }

Как указывает inhan в своем комментарии, поскольку дефис является последним символом в группе и, следовательно, однозначен, вполне возможно, что можно опустить экранирование, чтобы иметь только это регулярное выражение:

/[^+-]/g

Но ни один из нас не уверен, будет ли это всегда работать, тогда как сбежавшая форма определенно будет работать.

2
David M 11 Янв 2013 в 02:03
1
Но не тогда, когда он находится в конце группы символов;)
 – 
inhan
10 Янв 2013 в 20:46
Это не зависит от парсера? В этом контексте это по-прежнему особый символ. Не уверен в ответе, кстати, спрашивая, знаете ли вы?
 – 
David M
10 Янв 2013 в 20:48
Нет, AFAIK. Но поправьте меня, если кто-то, читающий это, знает иное.
 – 
inhan
10 Янв 2013 в 20:51