Я хотел бы знать, как я могу совместить текст ТОЛЬКО, если есть обе скобки (начало и закрытие).
В настоящее время мой RegExp: ^1?\s?\(?\d{3}\)?[-\s]?\d{3}[-\s]?\d{4}$
.
Он проверяет действительные числа в США, однако \(?
И \)?
делает разницу. Он должен соответствовать тексту, если их 0 или 2.
Некоторые тесты:
1 555) 555-5555 - false
555) -555-5555 - false
(555-555-5555 - false
Теперь все они возвращают тот же результат - true.
Вот ссылка на него: https://regexr.com/3kjei (^
- это потому, что я должен выбрать только одну строку без разрыва строки, удалите из нее еще две строки, чтобы вы могли видеть, что она возвращает true. строки в этой ссылке должны возвращать true, просто проверьте, чтобы в текстовом редакторе была только одна строка).
Спасибо
Вы можете использовать
^(?:1\s?)?(?:\(\d{3}\)|\d{3})[-\s]?\d{3}[-\s]?\d{4}$
См. Демо-версию regex.
Заметим, что ^1?\s?
в вашем регулярном выражении разрешить одно пробел в начале, поэтому я предлагаю ^(?:1\s?)?
- необязательная последовательность, начинающаяся с 1
которая необязательно выполняется с пробелами.
\(?\d{3}\)?
часть заменяется на (?:\(\d{3}\)|\d{3})
- не захватывающая группа, которая соответствует либо (
+3 digits+ )
либо 3 цифры (так, no (123
или 123) ').
подробности
^
- начало строки(?:1\s?)?
- 1 или 0 вхождений 1
необязательно с 1 пробелом char(?:\(\d{3}\)|\d{3})
- либо (
, 3 цифры )
либо всего 3 цифры[-\s]?
- необязательный -
или пробел\d{3}
- 3 цифры[-\s]?
- необязательный -
или пробел\d{4}
- 4 цифры$
- конец строки. Почему не в части вашего регулярного выражения, которая говорит \(?\d{3}\)?
что вы "или" это вместо этого. Например. Замените его примерно так:
((\(\d{3}\))|\d{3})
\(\d{3}\)|\d{3}
.