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]+)))*$
每个单词可能看起来像 COMPANY
或 Company
,但不像 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 个
之后单词前的一个或多个空格
^
- 字符串开头,$
- 字符串结尾
如果 MyCompanyName
和 MYCOMPANy
也可以接受(首字母大写),则更简单的解决方案:
^([A-Z][a-z]*\s*)+$
使用 regex101 测试
这个正则表达式可以工作
^(?:[A-Z](?:[A-Z]*|[a-z]*))(?:\s+[A-Z](?:[A-Z]*|[a-z]*))*$
正则表达式分解
^ #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
正在尝试验证字符串,例如...
- 我的公司名称(通过)
- 我的公司名称(失败)
- 我的公司名称(失败)
- 我的公司名称(失败)
- 我的公司名称(通过)
- 公司(通过)
希望它匹配专有名称格式(每个单词的首字母大写)...
- 我的公司名称
我可以使用以下正则表达式,它在 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]+)))*$
每个单词可能看起来像 COMPANY
或 Company
,但不像 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 个
之后单词前的一个或多个空格
^
- 字符串开头,$
- 字符串结尾
如果 MyCompanyName
和 MYCOMPANy
也可以接受(首字母大写),则更简单的解决方案:
^([A-Z][a-z]*\s*)+$
使用 regex101 测试
这个正则表达式可以工作
^(?:[A-Z](?:[A-Z]*|[a-z]*))(?:\s+[A-Z](?:[A-Z]*|[a-z]*))*$
正则表达式分解
^ #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