正则表达式应匹配潜在的国家代码前缀(即+1
)、数字、拼写出的数字以及以下任何潜在的分隔符:第一个月第一个月,第一个月第二个月,第一个月第三个月,第一个月第四个月,第一个月第五个月,第一个月第六个月,第一个月第七个月,第一个月第八个月
我知道网上有数以千计的电话号码正则表达式解决方案,但我的研究还没有给我带来一个解决问题的方案。
我需要一个正则表达式来验证一个输入字符串,该字符串可能包含一个电话号码,可能以国家代码为前缀。这个正则表达式还应该匹配任何可能拼写出的数字。
下面是一些应该匹配的明显候选项:
+18881234567
+3748881234567 // Armenia
18881234567
8881234567
+1888-123-4567
+1888-123-45-6-7
+18.88.123-45-6-7
8|88.123-45|6|7
+1888 1234567
+1888- 1234567
这一部分相对简单,我目前遇到的唯一问题是处理所有可能的分隔符类型,现在,我只查找-
、.
和|
。
另一位是拼写出来的数字,正则表达式也应该匹配(这是我唯一能想到的):
a1888a123a4567
+1eight8eight1two345six7
8eight81234five67
8(eight)81234(five)67
8(eight-)81234(-five)67
我不知道如何解析正则表达式,我也无法在网上找到任何东西。
有什么能与这些变异相匹配?
1条答案
按热度按时间9jyewag01#
我不相信你可以用一个正则表达式 * 和 * 来验证这样的输入,因为如果你允许输入包含'eight'这样的字符串,你可能还需要把它翻译成'8',所以我将按照如下方式进行:
1.首先将输入转换为小写,这样就不必担心“eight”、“Eight”、eighT“等变体。
1.用“1”替换出现的“one”,用“2”替换出现的“two”,依此类推。
1.删除任何非数字的内容。
1.测试结果字符串是否至少包含一个数字(即长度〉= 1)。您可能对位数有特定的规则,但尚未指定这些规则。
如果我上面的假设不正确,因为你似乎允许任意的分隔符和字母字符串,你实际上允许任何东西,只要输入包含至少一个数字,在这种情况下,你只需要检查
/[0-9]|one||two|etc./i
。否则: