2015-07-19 2 views
-3
RegExp("^(921|931)$\\d{5,5}$").test("93111111"); 

Как я могу совместить строку, чтобы начать с 921 или 931, следующих с пятью любыми цифрами?Regexp Начать с Javascript

+1

/^9[23]1\d{5}/.test('93111111 ') –

+1

Я предлагаю вставить это в инструментарий regexp, например https://regex101.com/. Вы увидите обозначение справа, «$ assert position в конце строки». Подумайте, почему вы положили этот $ там и попробуйте удалить его. В принципе, вам нужно научиться отлаживать собственные регулярные выражения. Это не очень хорошее решение для публикации в SO каждый раз, когда вы сталкиваетесь с небольшой проблемой. –

+0

Должен ли я задаваться вопросом, что с downvotes? Это кажется правильным вопросом. Базовый, да, но тем не менее действительный. – dman2306

ответ

3

TL; др: использовать регулярное выражение буквальным следующим образом:

var re = /^(9[23]1)\d{5}$/; 
alert(re.test("93111111")); 

Пояснение:

Во-первых, удалить первый $:

RegExp("^(921|931)\\d{5,5}$").test("93111111"); 

$ соответствует только конец строки, поэтому ваше регулярное выражение никогда не будет соответствовать, когда у вас есть один после (921|931). Кроме того, обратите внимание, что вам нужно удвоить ваш \, потому что он находится в кавычках, как объясняется в комментариях.

Вы можете реально упростить дальнейшее упрощая {5,5} к {5}:

RegExp("^(921|931)\\d{5}$").test("93111111"); 

Даже лучше, используйте регулярное выражение буквальным и упростить (921|931) к (9[23]1):

var re = /^(9[23]1)\d{5}$/; 
alert(re.test("93111111")); 

Это, безусловно, самый чистый, самый простой для чтения.

+2

, если вы используете свое регулярное выражение в '' ', вам нужно снова сбрасывать обратную косую черту. –

+0

@ AvinashRaj хорошая точка, пропустили это. Спасибо. –

+0

Нет, вам просто нужны две обратные косые черты:' \\ d'. вы показываете неуклюжие версии с использованием конструктора regexp и '{5,5}' first? Просто покажите свое окончательное решение. Наконец, вам не нужны скобки вокруг '9 [23] 1'. –

-1

Вы близко, но у вас есть ошибка. Значение $ означает конец строки. Это означает, что у вас не может быть более одного, поскольку строка имеет только один конец. Кроме того, {5,5} можно упростить до {5}. Попробуйте:

RegExp("^(921|931)\\d{5}$").test("93111111"); 

Это означает:

  • ^- начало строки
  • Вслед за 921 или 931
  • следуют 5 цифр
  • $ - конец строки
+0

Забыл вставить лишние \. Он обновлен. И да, я тестировал его, это называется ошибкой копирования/вставки. Это то, что я получаю для написания в regex101 и вставки его здесь, я думаю ... – dman2306