繁体   English   中英

正则表达式,仅将名称与一个空格匹配

[英]regular expression to match name with only one spaces

我在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-除空格外的所有内容
  • “ +”-量词“一个或多个”
  • $-字符串结尾

您还可以使用单词边界...

 function isFullName(s) { return /^\\b\\w+\\b \\b\\w+\\b$/.test(s); } ['Giuseppe', 'Mandato', 'Giuseppe Mandato'] .forEach(item => console.log(`isFullName ${item} ? ${isFullName(item)}`)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM