[英]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+$/
尝试这个
一些解释:
您还可以使用单词边界...
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.