如果我有E.164格式化的电话号码,并且我想查找具有该电话号码的任何用户,虽然他们的号码可能没有格式化,那该正则表达式会是什么样的?
示例:
假设:
1234567891
正则表达式应匹配以下任何一个:
(123)456 7891
123-456-7891
1234567891
123.456.7891
1234567891
以上任何一个带有尾随或前导空格的内容。
答案 0 :(得分:1)
var str = '+1234567891',
parts = str.match(/\+((\d{3})(\d{3})(\d{4}))/).slice(1),
num = parts.shift(),
rg = new RegExp(
'\\s*(?:\\+?' + [
num,
parts.join('.'),
parts.join('-'),
'\\(' + parts[0] + '\\) ' + parts.slice(1).join(' ')
].join('|') + ')\\s*');
在这种情况下,它会产生
/\s*(?:\+?1234567891|123.456.7891|123-456-7891|\(123\) 456 7891)\s*/
答案 1 :(得分:0)
我认为你能做的最好的事情是将两个数字标准化并比较结果。例如,您可以删除不是数字([^0-9]
)的所有内容,并仅比较左边的数字。
答案 2 :(得分:0)
您可以使用以下正则表达式:
^\s?(\(\d{3}\)|\+?\d{3})([\s-.])?\d{3}\2\d{4}\s?$
演示:https://www.regex101.com/r/jM2fF4/6
答案 3 :(得分:0)
尝试:
DateTime dt = new DateTime(2015, 6, 3, 23, 0, 0);
Console.WriteLine(dt.ToString("ddd HH:mm", CultureInfo.InvariantCulture)); // Wed 23:00
DateTime dt = new DateTime(2015, 6, 4, 1, 0, 0);
Console.WriteLine(dt.ToString("ddd h:mm tt", CultureInfo.InvariantCulture)); // Thu 1:00 AM
匹配任何前面的空格/\s*(\+)?(\(\d{3}\)|\d{3})([ -.]|)\d{3}(\3)\d{4}\s*/
可选地匹配\s*
(\+)?
匹配+
或(\(\d{3}\)|\d{3})
(123)
匹配123
,([ -.]|)
,
或任何内容-
匹配.
\d{3}
123
(\3)
匹配( |-|.|)
\d{4}
匹配以下任何空格