Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Regex диапазон (https://javascript.ru/forum/css-html-internet-explorer/60479-regex-diapazon.html)

vaxxxye 02.01.2016 20:07

Regex диапазон
 
Прошу у вас помощи форумчане.Помогите пожалуйста с настройками диапазона regex под укр номера.
Вот сама схема - но сложновато как то получается
\([\d]{2,3}\)[ ]{0,2}[\d]{7}
[\d]{3}-[\d]{3}-[\d]{2}-[\d]{2}
[\d]{3}[- ()]{1}[\d]{3}-[\d]{2}-[\d]{2}
[\d]{3}\) [\d]{7}
[\d]{3}\) [\d]{3}[ -]{1}[\d]{2}[ -]{1}[\d]{2}[ -]{1}
[\d]{12}|[\d]{11}
[\d]{10}|[\d]{9}
[\d]{3}[- ()]{1}[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{2}
[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{2}[- ()]{1}[\d]{3}
[\d]{3}[- ()]{1}[\d]{2}[- ()]{1}[\d]{3}[- ()]{1}[\d]{2}
[\d]{3}[- ()]{1}[\d]{7}
[\d]{3}[- ()]{1}[\d]{4}[- ()]{1}[\d]{3}
[\d]{3}[- ()]{1}[\d]{3}[- ()]{1}[\d]{4}
Как правильно вправить в этот код что бы принимало номера с телефонами "+38..." по примеру +38(097)xxxxxxx ? хотя бы один регекс,исходя из этих рг.
Благодарю за помощь и с НГ вас.

callbackhell 02.01.2016 20:21

\+38\(097\)\d{6}

callbackhell 02.01.2016 20:23

Цитата:

Сообщение от vaxxxye
+38...

если по этому шаблону, то
\+38\(\d\d\d\)\d{6}

vaxxxye 03.01.2016 14:53

Цитата:

Сообщение от callbackhell (Сообщение 402265)
если по этому шаблону, то
\+38\(\d\d\d\)\d{6}

Можно еще пару регулярок по этому шаблону?
к примеру на такое - буду очень благодарен и сразу проверю работает ли.
+38 xxx xxx xx xx
+380 (xx) xxx-xx-xx
+380 (xx) xx-xx-xxx
+38 xxx-xxx-xx-xx
+38 (xxx)-xxx-xx-xx
+38 (xxx)xx-xx-xxx

vaxxxye 03.01.2016 17:09

мне кажется тут проблема в том что схема ориентируется на posix-совместимые рг.
ибо к примеру [\d]{3}-[\d]{3}-[\d]{2}-[\d]{2} отвечает за поиск такой модели символов 097-955-55-55.
Следовательно тогда вопрос как подогнать их по +380 и 38.
по типу:
(xx) xxxxxxx
+38 xxx xxxxxxx
+38 (xxx) xxx xxx x
+380 (xx) xxx-xxx-x
+38 xxxxxxxxxx
+38 xxx xxx xx xx
+38 xxx xxx xxx x
+380 (xx) xxx-xx-xx
+380 (xx) xx-xx-xxx
+38 xxx-xxx-xx-xx
+38 (xxx)-xxx-xx-xx
+38 (xxx)xx-xx-xxx
+380xxxxxxxxxx

googlecallback 03.01.2016 19:39

vaxxxye,
просто ставьте \d вместо каждого цифрового символа, скобки и + экранируйте. Ваша задача на уровне детсада, думаете кому-то хочется упражняться в перепечатвании ваших *случаев*? Если пользуетесь регулярками, почитайте хотя бы о них.

vaxxxye 04.01.2016 13:20

Понимаю,в этом не силён.
За всё время работы из моделей
(xx) xxxxxxx
+38 xxx xxxxxxx
+38 (xxx) xxx xxx x
+380 (xx) xxx-xxx-x
+38 xxxxxxxxxx
+38 xxx xxx xx xx
+38 xxx xxx xxx x
+380 (xx) xxx-xx-xx
+380 (xx) xx-xx-xxx
+38 xxx-xxx-xx-xx
+38 (xxx)-xxx-xx-xx
+38 (xxx)xx-xx-xxx
+380xxxxxxxxxx
подобрал только одну \([\d]{2}\)\ [\d]{7} для (хх)ххххххх
можно хотя бы одну форму для +38? буду оч благодарен.
Да,regex101 как инструмент не реагирует на текст с такой формой но форма правильная,проверил уже.)

vaxxxye 04.01.2016 13:20

Цитата:

Сообщение от googlecallback (Сообщение 402431)
vaxxxye,
просто ставьте \d вместо каждого цифрового символа, скобки и + экранируйте. Ваша задача на уровне детсада, думаете кому-то хочется упражняться в перепечатвании ваших *случаев*? Если пользуетесь регулярками, почитайте хотя бы о них.

если не сложно) а то не как справится не могу

googlecallback 04.01.2016 14:54

генертор регулярных выражений
 
gen = function(string, splitter){
 return string
 .split(splitter)
 .map(function(s){return new RegExp(
  "^" + s
  .replace(/x/g, "\\d")
  .replace(/(\+|\(|\))/g, "\\$1") + "$"
 )}) 
}

string = "(xx) xxxxxxx\n+38 xxx xxxxxxx\n+38 (xxx) xxx xxx x\n+380 (xx) xxx-xxx-x\n+38 xxxxxxxxxx\n+38 xxx xxx xx xx\n+38 xxx xxx xxx x\n+380 (xx) xxx-xx-xx\n+380 (xx) xx-xx-xxx\n+38 xxx-xxx-xx-xx\n+38 (xxx)-xxx-xx-xx\n+38 (xxx)xx-xx-xxx\n+380xxxxxxxxxx"


regexes = gen(string, "\n")
strings = string.split(/\n/).map(function(s){return s.replace(/x/g, "1")})

with( console ){
  log( regexes )
  log(strings )
  log( regexes.map(function(re, i){return re.test(strings[i])}) )
  log( regexes.reverse().map(function(re, i){return re.test(strings[i])}))
}

///////////////////////////////////   OUT  ///////////////////////////////////////
/* 


[ /^\(\d\d\) \d\d\d\d\d\d\d$/,
  /^\+38 \d\d\d \d\d\d\d\d\d\d$/,
  /^\+38 \(\d\d\d\) \d\d\d \d\d\d \d$/,
  /^\+380 \(\d\d\) \d\d\d-\d\d\d-\d$/,
  /^\+38 \d\d\d\d\d\d\d\d\d\d$/,
  /^\+38 \d\d\d \d\d\d \d\d \d\d$/,
  /^\+38 \d\d\d \d\d\d \d\d\d \d$/,
  /^\+380 \(\d\d\) \d\d\d-\d\d-\d\d$/,
  /^\+380 \(\d\d\) \d\d-\d\d-\d\d\d$/,
  /^\+38 \d\d\d-\d\d\d-\d\d-\d\d$/,
  /^\+38 \(\d\d\d\)-\d\d\d-\d\d-\d\d$/,
  /^\+38 \(\d\d\d\)\d\d-\d\d-\d\d\d$/,
  /^\+380\d\d\d\d\d\d\d\d\d\d$/ ]
[ '(11) 1111111',
  '+38 111 1111111',
  '+38 (111) 111 111 1',
  '+380 (11) 111-111-1',
  '+38 1111111111',
  '+38 111 111 11 11',
  '+38 111 111 111 1',
  '+380 (11) 111-11-11',
  '+380 (11) 11-11-111',
  '+38 111-111-11-11',
  '+38 (111)-111-11-11',
  '+38 (111)11-11-111',
  '+3801111111111' ]
[ true,
  true,
  true,
  true,
  true,
  true,
  true,
  true,
  true,
  true,
  true,
  true,
  true ]
[ false,
  false,
  false,
  false,
  false,
  false,
  true,
  false,
  false,
  false,
  false,
  false,
  false ]
*/


Часовой пояс GMT +3, время: 22:04.