Проверьте, соответствует ли строка регулярному выражению в JS

372

Я хочу использовать JavaScript (может быть с jQuery), чтобы выполнить некоторую проверку на стороне клиента, чтобы проверить соответствие строки регулярному выражению:

^([a-z0-9]{5,})$

В идеале это выражение будет возвращено true или false.

Я новичок в JavaScript, match() делает то, что мне нужно? Кажется, проверяет, соответствует ли часть строки регулярному выражению, а не всему.

  • 0
    Вы хотите полное совпадение или просто содержит ли строка соответствующую подстроку?
  • 1
    Полное совпадение - не совпадающая подстрока.
Теги:
match

5 ответов

599
Лучший ответ

Используйте regex.test(), если все, что вам нужно, является логическим результатом:

/^([a-z0-9]{5,})$/.test('abc1');   // false

/^([a-z0-9]{5,})$/.test('abc12');   // true

/^([a-z0-9]{5,})$/.test('abc123');   // true

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

  • 1
    Что там делает начальное ^ в регулярном выражении?
  • 5
    @PedroD ^ подразумевает начало или начинается с
Показать ещё 4 комментария
79

Использовать метод test():

var string = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(string)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}
  • 3
    Обратите внимание, что версия с RegExp позволяет вставлять значения переменных в строку регулярного выражения.
  • 2
    пришлось убрать двойные кавычки в new RegExp("^([a-z0-9]{5,})$") , чтобы заставить его работать
40

Вы также можете использовать match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

Но test() кажется более быстрым, поскольку вы можете читать здесь.

Важное различие между match() и test():

match() работает только со строками, но test() работает также с целыми числами.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true
  • 0
    Причина, по которой он работает с числом, заключается в том, что число приводится в строку, поскольку оно дается в качестве параметра, когда оно ожидает строку. Я бы не стал полагаться на это поведение. Это зависит от реализации test () в вашей среде. (совпадение не удается, потому что у чисел нет участника match ). Я бы рекомендовал явно преобразовать ваше число в строку, если вы хотите использовать его с регулярным выражением (например, String(123) ).
  • 0
    Здесь можно использовать совпадение, но если вы посмотрите на производительность, то test выполняется на 30% лучше, когда мы просто хотим проверить строку на соответствие регулярному выражению, а не извлекать из нее подстроки.
Показать ещё 2 комментария
27

Используйте /youregexp/.test(yourString), если вы хотите узнать, соответствует ли ваша строка регулярному выражению.

6

Вот пример, который ищет определенные теги HTML, поэтому ясно, что /someregex/.test() возвращает логическое значение:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню