我想要一个非常简单的Regex for Javascript验证电话号码,允许10 digits
并检查min numbers should be 10 and max 12
,包括- dash two times
。 123-123-1234
我在互联网上找到了一些,但没有一个适用于min / max length
。
期待在这里快速回应。
谢谢!
答案 0 :(得分:2)
你可以这样做
/^(?!.*-.*-.*-)(?=(?:\d{8,10}$)|(?:(?=.{9,11}$)[^-]*-[^-]*$)|(?:(?=.{10,12}$)[^-]*-[^-]*-[^-]*$) )[\d-]+$/
(?!...)
是negative lookahead assertion
(?=...)
是positive lookahead assertion
^ # Start of the string
(?!.*-.*-.*-) # Fails if there are more than 2 dashes
(?=(?:\d{8,10}$) # if only digits to the end, then length 8 to 10
|(?:(?=.{9,11}$)[^-]*-[^-]*$) # if one dash, then length from 9 to 11
|(?:(?=.{10,12}$)
[^-]*-[^-]*-[^-]*$ # if two dashes, then length from 10 to 12
)
)
[\d-]+ # match digits and dashes (your rules are done by the assertions)
$ # the end of the string
答案 1 :(得分:2)
你要求的不是一个简单的正则表达式,也可以在没有任何使用的情况下解决。
function isPhoneNumberValid(number){
var parts, len = (
parts = /^\d[\d-]+\d$/g.test(number) && number.split('-'),
parts.length==3 && parts.join('').length
);
return (len>=10 && len<=12)
}
可以肯定这可能比使用编译的正则表达式慢一点,但如果你不以这种方式检查数千分之一的电话号码,开销就会很小。
这在任何方面都不完美,但可能符合您的需求,但请注意,这允许在任何地方使用两个破折号,不包括数字的开头和结尾,因此这将返回true
作为111--123123
之类的字符串}。
答案 2 :(得分:0)
使用正则表达式没有简单的方法,特别是如果你允许破折号出现在某些不同的点上。
如果您仅允许在示例中的位置使用短划线,那么它将是^\d{3}-?\d{3}-?\d{4}$
这一个:^[\d-]{10,12}$
匹配长度为10到12的字符串,仅包含数字和短划线,但它也会匹配,例如-1234567890-
。