Как я могу разрешить один пробел в регулярном выражении - PullRequest
4 голосов
/ 01 марта 2020

Следующее регулярное выражение проверяет число, которое начинается с 6, 8 или 9 и должно быть ровно 8 цифр.

/^(6|8|9)\d{7}$/

Теперь я хочу также принять один пробел между цифрами, но не знаю, с чего начать.

Например, 61234567 и 6123 4567 должны быть разрешены, но только первый из них проходит мое текущее регулярное выражение.

Можете ли вы помочь мне создать его

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Вы можете использовать

^(?!.*(?:\s\d+){2})[689](?:\s?\d){7}$

См. Демоверсию regex

Подробности

  • ^ - начало строки
  • (?!.*(?:\s\d+){2}) - отрицательный прогноз, который не соответствует совпадению, если после любых 0+ символов, отличных от символов разрыва строки, имеется как можно больше вхождений, есть два вхождения пробелов, за которыми следует 1 + цифры
  • [689] - 6, 7 или 9
  • (?:\s?\d){7} - семь вхождений необязательного пробела, за которыми следует один ди git
  • $ - конец строки.

Чтобы разрешить начальный / конечный пробел, добавьте \s? (1 или 0) или \s* (0 или более) сразу после ^ и до $.

Чтобы разрешить еще один 1+ больше пробелов в строке di git, используйте

^(?!.*(?:\s+\d+){2})[689](?:\s*\d){7}$

См. это демонстрационное выражение regex .

0 голосов
/ 01 марта 2020

Вы можете использовать регулярное выражение

/^[689](?:\d{7}|(?=.{8}$)\d* \d+)$/

demo

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

/
^            # match beginning of line
[689]        # match '6', '8' or '9'
(?:          # begin non-capture group
  \d{7}      # match 7 digits
  |          # or
  (?=.{8}$)  # require the remainder of the line to have 8 chars
  \d*\ \d+   # match 0+ digits, a space, 1+ digits 
)            # end non-capture group
$            # match end of line
/x           # free-spacing regex definition mode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...