2016-10-26 2 views
2

Так что я пытаюсь захватить числа с максимальной длиной 9, которые могут быть «обфускации», например 1.2.3.4.5.6.7.8.9, имеет длину 17, но если мы «дефлассируем» ее, это 9 номера, так что это номер телефона.Regex obfuscated numbers max length

Я пробовал много регулярных выражений, но не смогли найти правильный, потому что отсутствуют захваты и в других случаях он захватывает больше, чем хотелось ...

(ну это просто тест) https://regex101.com/r/HmZo1s/1

В этом, он правильно отражает число выше, но не ниже одного, и он также фиксирует очень длинный номер, который должен быть опущен ... https://regex101.com/r/d9kv8F/1

Я надеюсь, что я объяснил правильно, что я хочу достичь ...

И число должно начинаться с 6, 7 or 9, чтобы быть действительным номером телефона, всегда 9 цифр.

EDIT: Я хочу использовать для телефонных номеров, но название правильное, так как вы можете использовать любой номер ... «Образцы обфускации» не всегда одинаковы, это может быть «что угодно», но конечно, мы не будем фокусироваться на этом, мы используем «простое» обфускацию (как в приведенных выше примерах), с точками, слэшами и тому подобным.

Я думаю, что это означает «извлечь» число, а затем посмотреть, начинается ли оно с 6, 7 or 9, а затем посмотреть, составляет ли оно 9 цифр, то это номер телефона, поэтому мы удаляем его из нашего текста (это делается с базовой заменой).

Например

6.6.6.7.7.7.8.8.8 =>666777888 =>remove

5.5.5.4.4.43.3.3 =>555444333 =>not a phone

это для системы, основанной комментарий, в котором мы хотим, чтобы удалить все виды телефонов там, чтобы они не разделили их.

+3

Можете ли вы быть более точным в том, что вы хотите, чтобы соответствовать, и что "нет? Какие промежуточные символы вы разрешаете удалять, чтобы распознавать номер телефона, сколько их не больше, а какие нет? Кроме того, то, что составляет действительный номер телефона, намного сложнее, чем просто проверка первой цифры - 6, 7 или 9, и проверка количества цифр - 9 .... – trincot

+0

Что относительно [** '\ b [679] [- \ ш. ] {7,15} \ d' **] (https://regex101.com/r/d9kv8F/2)? – Jan

+1

* «.... действительный номер телефона» * Так что это действительно попытка регулярного выражения для телефонных номеров?Название вопроса, описание и примеры не делают это совершенно ясным. Если вы хотите разрешить пользователю вводить произвольный текст, я настоятельно рекомендую вам отказаться от любой попытки проверить его с помощью регулярного выражения! –

ответ

1

Для экстракта телефонных номеров с нужным форматом, вы могли бы придумать:

\b[679][-\w. ]{7,15}\d 
# \b is a word boundary 
# [679] is one of 6, 7 or 9 
# followed by dashes, word characters, dots and spaces (7-15 times) 
# and a digit in the end 

См a demo on regex101.com.


Пожалуйста, обратите внимание, что вы все равно получите много ложных срабатываний (т.е. 6-------9, по-видимому, не число), так что вы, скорее всего, придется скорректировать их программно впоследствии.

+0

В соответствии с вашим ответом, 6.7 .... 8.9.1.1.2 это действительный номер телефона –

+0

@ sunkuet02: Что вы имеете в виду? – Jan

+0

Что такое матч: 10 и 12? – sunkuet02

0

, что об этом один: (? [679] [^ \ d]) (? \ D [^ \ d]) {7} \ d