Javascript 正则表达式只与一个空格匹配名称

Javascript 正则表达式只与一个空格匹配名称,javascript,regex,Javascript,Regex,我在js中有一个字符串条件,我必须检查文本框中输入的名称是否只包含一个空格 pattern: name.status === 'full_name' ? /^[a-zA-Z.+-.']+\s+[a-zA-Z.+-. ']+$/ : /^[a-zA-Z.+-. ']+$/ 但是上面的正则表达式也匹配以2个空格结尾的名称 我需要匹配它,以便输入的名称只接受一个空格作为名称字符串。因此,名称之间或末尾只有一个空格 两个观察结果:1)\s+在模式中匹配1个或多个空格,2)[+-.]匹配4个字符:+,

我在js中有一个字符串条件,我必须检查文本框中输入的名称是否只包含一个空格

 pattern: name.status === 'full_name' ? /^[a-zA-Z.+-.']+\s+[a-zA-Z.+-. ']+$/ : /^[a-zA-Z.+-. ']+$/
但是上面的正则表达式也匹配以2个空格结尾的名称

我需要匹配它,以便输入的名称只接受一个空格作为名称字符串。因此,名称之间或末尾只有一个空格

两个观察结果:1)
\s+
在模式中匹配1个或多个空格,2)
[+-.]
匹配4个字符:
+
-
,因此最好将连字符放在字符类的末尾

你可以用

/^[a-zA-Z.+'-]+(?:\s[a-zA-Z.+'-]+)*\s?$/

详细信息

  • ^
    -字符串的开头
  • [a-zA-Z.+'-]+
    -1个或多个字母,
    +
    '
    -
  • (?:\s[a-zA-Z.+'-]+)*
    -零个或多个序列:
    • \s
      -单个空白
    • [a-zA-Z.+'-]+
      -1个或多个字母,
      +
      '
      -
      字符
  • \s?
    -可选空白
  • $
    -字符串结束
注意:如果“名称”不能包含
+
,只需从字符类中删除这些符号即可

/^\S+\s\S+$/
试试这个

一些解释:

  • ^-字符串的开头
  • \s-单空格
  • \S-除空格外的所有内容
  • “+”-量词“一个或多个”
  • $-字符串结尾

    • 您也可以使用单词边界

      函数为完整名称{
      返回/^\b\w+\b\b\w+\b$/.test;
      }
      [‘朱塞佩’、‘曼达托’、‘朱塞佩·曼达托’]
      
      .forEach(item=>console.log(`isFullName${item}?${isFullName(item)}`))
      如果我给出以一个空格结尾的全名,则这不会传递。需要接受在中间或结尾只接受一个空间的名称。同样,名称与2个字符串不匹配。@rubyist那么,可以有2个空格吗?是的。我的意思是,对于名称字符串,允许的最大空间为1。所以带空格的“Alex”,带空格的“Alex Christop”和带空格的“Alex Christop David”都可以。我想你应该匹配一个由1个单词或2个单词组成的字符串,如果它们之间有2个单词,就用1个空格。然后使用。我需要匹配一个可以接受1个空格的名称字符串。所以“Alex”带空格,“Alex Christop”带空格,“Alex Christop David”带空格都可以。此处,每个名称字符串之间或名称末尾只有一个空格。如果此值中没有
      \n
      ,则这不是问题(但是是的,匹配的换行符);例如,使用类似于
      /^[^\t]+[\t][^\t]+$/
      的方法那么,您最终解决了这个问题吗?