Google 形成专有名称的正则表达式验证

Google Forms regex validation for proper name

正在尝试验证字符串,例如...

希望它匹配专有名称格式(每个单词的首字母大写)...

我可以使用以下正则表达式,它在 https://regex101.com/ 上工作得很好。但是当我尝试在 Google 表单验证中使用它时,它确实 NOT 起作用。我认为 Google 不喜欢 \p 标志。

^([\p{Lu}]\p{L}*\s*)+$

有没有办法将其转换为不使用 \p 标志的正则表达式?我尝试了以下正则表达式字符串,它确实 NOT 也能解决问题...

^([[A-Z]][a-z]*\s*)+$

如果你不需要 Unicode,试试这个:
^(([A-Z]+)|([A-Z][a-z]+))(\s+(([A-Z]+)|([A-Z][a-z]+)))*$

每个单词可能看起来像 COMPANYCompany,但不像 company,单词之间有空格(第 2 个之后)。

匹配项My Company Name, MY COMPANY Name, COMPANY.
不匹配my ComPany name, my Company Name, my company name.

(([A-Z]+) 匹配全部大写
([A-Z][a-z]+) 匹配大写
(...)|(...)匹配第一组第二组
* 允许在第一个单词
之后有 0 个或多个 Words \s+ 匹配第 2 个
之后单词前的一个或多个空格 ^ - 字符串开头,$ - 字符串结尾

如果 MyCompanyNameMYCOMPANy 也可以接受(首字母大写),则更简单的解决方案:
^([A-Z][a-z]*\s*)+$

使用 regex101 测试

这个正则表达式可以工作

^(?:[A-Z](?:[A-Z]*|[a-z]*))(?:\s+[A-Z](?:[A-Z]*|[a-z]*))*$

Regex Demo

正则表达式分解

^ #Start of string
(?:[A-Z](?:[A-Z]*|[a-z]*)) #Match at least one group starting with alphabets [A-Z]
(?:\s+[A-Z](?:[A-Z]*|[a-z]*))* #Check whatever follows contains space and meets the same requirement as above
$ #End of string