Javascript 用于字符集中单个字符的带乘数的正则表达式

Javascript 用于字符集中单个字符的带乘数的正则表达式,javascript,regex,string,Javascript,Regex,String,我需要一个正则表达式来验证电话号码。允许空白(但一次只能有一个) 确定:+45 1234 1234 不正常:+45 1234 1234 正常:00455445 不正常:0045 我尝试了/^[+]?[0-9\s-]*$/,但它不起作用,因为它允许多个空格。尝试使用此正则表达式: var re=/^\+?\d+(\s\d+)*$/; 变量字符串=[“+4512341234”、“+4512341234”、“0045544545”、“00455445”]; strings.forEach(s=>co

我需要一个正则表达式来验证电话号码。允许空白(但一次只能有一个)

确定:
+45 1234 1234

不正常:
+45 1234 1234

正常:
00455445

不正常:
0045

我尝试了
/^[+]?[0-9\s-]*$/
,但它不起作用,因为它允许多个空格。

尝试使用此正则表达式:

var re=/^\+?\d+(\s\d+)*$/;
变量字符串=[“+4512341234”、“+4512341234”、“0045544545”、“00455445”];

strings.forEach(s=>console.log(s.match(re))
您的
^[+]?[0-9\s-]*$
正则表达式匹配一个字符串,该字符串以可选加号(
[+]?
)开头,然后具有无限量(0或更多)的数字、空格或连字符,因此,它甚至匹配
“+--”
字符串:

你需要使用

/^\+?[0-9]+(?:[\s-][0-9]+)*$/
请参阅和:

如果要保持字符类中的连字符未转义,或转义字符类中的连字符,
[\s-]
,请注意将
-
保留在
[\s-]
中字符类的末尾

详细信息

  • ^
    -字符串的开头
  • \+?
    -可选的
    +
    符号
  • [0-9]+
    -一个或多个数字
  • (?:[\s-][0-9]+)*
    -与0次或多次重复的
    • [\s-]
      -与单个空格或
      -
    • [0-9]+
      -1位或更多数字
  • $
    -字符串结尾

试试
/^\+?[0-9]+(?:[\s-][0-9]+)*$/
,看看为什么要删除regex尝试?请回滚。谢谢@WiktorStribiżew。你能解释一下你的建议为什么有效吗?在测试时,我注意到当添加一个空格时,正则表达式是无效的,直到我在它后面添加一个数字字符。我怀疑这是解决方案的一部分?您的正则表达式可以简化:^\+?\d+(\s\d+)*$您还没有提供解决方案@WiktorStribiżew。这样做,我会批准的