翻译正则表达式

时间:2016-11-11 01:37:01

标签: javascript regex bash grep

我想翻译这个JS正则表达式

^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$

在grep中使用。所有电话号码都与之相符:

+79261234567
89261234567
79261234567
+7 926 123 45 67
8(926)123-45-67
123-45-67
9261234567
79261234567
(495)1234567
(495) 123 45 67
89261234567
8-926-123-45-67
8 927 1234 234
8 927 12 12 888
8 927 12 555 12
8 927 123 8 123

我尝试了很多变种,但没有人适合我。

1 个答案:

答案 0 :(得分:1)

我没有测试过您的模式,但有几点需要考虑:

[\- ]应改为[- ][ -]

  

(在角色类[]中,如果是第一个,则不需要转义破折号   或者最后)。

[\d]可能会失败,因此请使用[0-9][:digit:]

所以这会让你:

grep -E "^((8|\+7)[ -]?)?(\(?[0-9]{3}\)?[ -]?)?[0-9 -]{7,10}$" file

egrep

egrep "^((8|\+7)[ -]?)?(\(?[0-9]{3}\)?[ -]?)?[0-9 -]{7,10}$" file