2014-09-12 7 views
0

Нам нужны номера телефонов для сопоставления в некоторых кусках HTML с JavaScript и очень близки, но возникают проблемы. Мы не хотим сопоставлять номера телефонов, которые отображаются в таких атрибутах, как max-length="404-555-1212". Рассмотрим следующий текст:JavaScript Regex соответствует номерам телефонов, но не соответствует атрибутам HTML

Sample: 

Shouldn’t Match: 
max-length='' 
max-length="" 
max-length=012-345-6789" 

Don’t want the > 
<strong>866.643.4170</strong> 

Don’t really want this plus included either: 
+1-(800)-555-2468 

abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 
-.,[email protected]#$%^&*();\/|<>"' 
12345 -98.7 3.141 .6180 9,000 +42 
555.123.4567  +1-(800)-555-2468 

со следующими Regex, мы можем захватить все телефонные номера, но это не исключает атрибуты:

/(\d{1}[-. ])?\(?\d{3}\)?[-. ]? *\d{3}-? *[-. ]?\d{4}/g 

Мы пытались следующее, но покидает > в конце <strong>:

/[^"='](\d{1}[-. ])?\(?\d{3}\)?[-. ]? *\d{3}-? *[-. ]?\d{4}/g 

Любые мысли о том, как сделать эту работу?

+0

Являются ли нежелательные атрибуты всегда называемыми «max-length», или они могут быть чем угодно? Есть ли знак равенства перед номером телефона? – Schlaus

+0

Не запускайте регулярное выражение против HTML. Вместо этого извлеките значения и запустите с ними регулярные выражения. – 2014-09-12 21:28:02

+0

@Schlaus Атрибут может быть любым, а не только max-length. До законного номера телефона никогда не будет. –

ответ

0

Так что кто-то вчера ответил на этот вопрос, и я возвращался, чтобы принять ответ, но он был удален. Однако решение, которое они предоставили, действительно работало, поэтому для потомков я хотел опубликовать решение, которое они предоставили.

Вот регулярное выражение, которое решает эту проблему:

/(?:\d[-. ])?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4}(?!["'])/g 

А вот ссылка на рабочий пример:

http://regex101.com/r/rK6wY1/1

Я хотел бы дал кредит с первоначальным отвечающего ,

Смежные вопросы