【问题标题】:Google Forms regex validation for proper name正确名称的 Google 表单正则表达式验证
【发布时间】:2016-05-03 17:17:26
【问题描述】:

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

  • 我的公司名称​​(通过)
  • 我的公司名称​​(失败)
  • 我的公司名称​​(失败)
  • 我的公司名称​​(失败)
  • 我的公司名称​​(通过)
  • 公司(通过)

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

  • 我的公司名称

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

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

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

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

【问题讨论】:

  • ^([A-Z][a-z]*\s*)+$ 是否不适用于 Google 表单或不适合您的需求(为什么?)
  • @kit 亲爱的主!我发誓我已经测试过了,如果它不起作用......然而,一旦我在这里输入它,我想我的蝴蝶没有得到最好的我...... Gezz..回答你的问题似乎工作得很好。把它放在一个答案中。 ;)
  • 它将匹配不正确的MYy Company NameMy ComPany Name
  • @kit 好好测试一下..不要着急

标签: regex google-forms


【解决方案1】:

这个正则表达式可以工作

^(?:[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

【讨论】:

  • 谢谢!虽然我认为这个答案比需要的要多得多,但它是一个很棒的答案。我也喜欢您添加到答案中的正则表达式演示!
【解决方案2】:

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

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

匹配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+ 匹配第二个单词之前的一个或多个空格
^ - 字符串开头,$ - 字符串结尾

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

用正则表达式101测试

【讨论】:

  • 匹配 COMPANY 吗?
  • 实际上在regex101.com 进行了测试,它与“我的公司名称”不匹配,我需要它。
  • 更正了我的正则表达式,检查一下
  • @kit 你认为^([A-Z][a-z]*\s*)+$ 也可以工作还是你认为它必须是^([A-Z]+\s*)?([A-Z][a-z]*\s*)+$?我问是因为第一个要小得多。
  • @kit 我会接受您的回答,但我认为您应该为简单起见将^([A-Z][a-z]*\s*)+$ 添加到您的回答中。它似乎完美地工作! - 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多