2-партер;в Javascript - обнаружить специальные символы и заменить все * на% - PullRequest
0 голосов
/ 09 февраля 2012

Вопрос 1: я пробовал следующее, чтобы обнаружить символы (прописные и строчные), цифры и *, но я получаю ошибку, что это недопустимое регулярное выражение.

var pattern = '?[a-zA-Z0-9*][a-zA-Z0-9*]*';

Вопрос 2: Как я могу заменить все вхождения символа * на символ% в строке с регулярным выражением? Я регулярное выражение noob, и все, что я до сих пор пробовал, продолжает бомбить ... (Ответил)

Редактировать 1 и 2: Разъяснение моего безумия.

Редактировать 3: Хотел предоставить мое окончательное решение:

Это то, чем я закончил для сопоставления с образцом:

var pattern = "^[a-zA-Z0-9*]*$";
var regEx = new RegExp(pattern);
if(regEx.test(searchText) === true) {
    return true;
}

Выбранный ответ ниже выполняет замену, как я первоначально просил. Спасибо всем за ответы и помощь.

Ответы [ 3 ]

5 голосов
/ 09 февраля 2012

Этот вопрос меня пугает, потому что он предполагает, что вы создаете уязвимость SQL-инъекция , но ответ:

s = 'foo*bar*baz';
s = s.replace(/\*/g, '%');
// now s == 'foo%bar%baz'
2 голосов
/ 09 февраля 2012
var newString = "foo*bar*baz".replace(/\*/g, "%");

Флаг регулярного выражения g означает «глобально» или «все из них».

1 голос
/ 09 февраля 2012

Ответ на часть «Вопрос 1»

Во-первых, если вы хотите определить шаблон регулярного выражения для использования в другом месте, это делается с косыми чертами / без кавычек " например,

/?[a-zA-Z0-9*][a-zA-Z0-9*]*/

Это , а не допустимое регулярное выражение, потому что «опциональному» оператору ? нужно что-то слева от него, чтобы работать, как и *. Удаление этого дает вам действительное регулярное выражение.

var pattern = /[a-zA-Z0-9*][a-zA-Z0-9*]*/;

Улучшения - поскольку ваши два класса символов [a-zA-Z0-9*] абсолютно одинаковы, вам не нужно повторять их, просто используйте оператор + вместо *

var pattern = /[a-zA-Z0-9*]+/;

и вместо списка a-zA-Z просто игнорируйте регистр, добавляя оператор i

var pattern = /[A-Z0-9*]+/i;

Наконец, если вы хотите проверить, точно ли совпадают входные данные, вам нужно привязать шаблон как в начале, так и в конце, в противном случае .match() найдет шаблон, если он появится в любом месте ввода.

var pattern = /^[A-Z0-9*]+$/i;
var input = "Foo*Bar*baz";
console.log("Got: " + input.match(pattern);
...