我正在使用此regex从长字符串中捕获电话号码:
\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*
测试字符串:
asdjasjkdh 1 800 555 1234 01/01/2012 asdhajksdh 18005551234 jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak +86 800 555 1234 sdkajs test@gmail.com lorem ipsume. I am dotminors.zszsd@gmail.ca 18005551234 SADASDD +1 800 555-1234 SSDA ASASD 1-800-555-1234 1 (800) 555-1234 asdsasdadsadasda sdada 8005551234 x5678 wkadakasd asdjsadksad (800)5551234
" 1 800 555 1234 ",
" 18005551234 ",
" +86 800 555 1234 ",
" 18005551234 ",
" +1 800 555-1234 ",
" 1-800-555-1234 ",
"1 (800) 555-1234 ",
" 8005551234 x5678 ",
" (800)5551234"
正如您所注意到的,一些数字的开头或结尾都有空格。我怎么能只抓取电话号码部分,而不必再做单独的修剪?
编辑:
如果我删除
\s*
在两端,它给了我一些缺少最后一个数字的电话号码。我用输出更新了我的问题:
"1 800 555 1234",
" 1800555123",
"+86 800 555 1234",
" 1800555123",
"+1 800 555-1234",
"1-800-555-1234",
"1 (800) 555-1234",
" 8005551234 x5678",
" (800)5551234"
正如您将要注意到的,第二和第四个电话号码在结尾处缺少“4”,并且仍然占据空白。