【问题标题】:regular expression to match name with only one spaces正则表达式匹配名称只有一个空格
【发布时间】:2017-08-08 09:53:34
【问题描述】:

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

 pattern: name.status === 'full_name' ? /^[a-zA-Z.+-.']+\s+[a-zA-Z.+-. ']+$/ : /^[a-zA-Z.+-. ']+$/

但上面的正则表达式也匹配以 2 个空格结尾的名称。

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

【问题讨论】:

  • 那么,你最后解决了这个问题吗?

标签: javascript regex


【解决方案1】:

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

你可以使用

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

regex demo

详情

  • ^ - 字符串开头
  • [a-zA-Z.+'-]+ - 1 个或多个字母,.+'-
  • (?:\s[a-zA-Z.+'-]+)* - 零个或多个序列:
    • \s - 一个空格
    • [a-zA-Z.+'-]+ - 1 个或多个字母,.+'- 字符
  • \s? - 可选空格
  • $ - 字符串结束。

注意:如果“名称”不能包含.+,只需从您的字符类中删除这些符号。

【讨论】:

  • 如果我给出以一个空格结尾的全名,这不会通过。需要接受在中间或末尾只接受一个空格的名称。也不匹配带有 2 个字符串的名称。
  • @rubyist 那么,可以有 2 个空格吗?
  • 是的。我的意思是说名称字符串最多允许 1 个空格。所以带空格的“Alex”、带空格的“Alex Christop”和带空格的“Alex Christop David”都可以。
  • 我想你想匹配一个由 1 个单词或 2 个单词组成的字符串,如果它们之间有 2 个单词,则带有 1 个空格。然后使用^[a-zA-Z.+'-]+(?:\s[a-zA-Z.+'-]+)?$
  • 我需要匹配一个可以接受1个空格的名称字符串。所以“Alex”带空格,“Alex Christop”带空格,“Alex Christop David”带空格都可以。这里每个名称字符串在名称的中间或末尾只有 1 个空格。
【解决方案2】:
/^\S+\s\S+$/

试试这个

一些解释:

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

【讨论】:

  • 如果这个值中没有\n,这不是问题(但是是的,匹配换行符);所以请使用/^[^ \t]+[ \t][^ \t]+$/ 之类的东西
【解决方案3】:

你也可以使用单词边界...

function isFullName(s) {
  
  return /^\b\w+\b \b\w+\b$/.test(s);
}



['Giuseppe', 'Mandato', 'Giuseppe Mandato']
  .forEach(item => console.log(`isFullName ${item} ? ${isFullName(item)}`))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多