什么是正则表达式只允许大写/小写(字母字符),句点,空格和短划线?

per*_*nce 24 regex

我在创建正则表达式验证器时遇到问题,该验证器检查以确保输入仅包含大写或小写字母,空格,句点,下划线和短划线.无法通过搜索在线找到此示例.例如:

这些都可以:

Dr. Marshall
sam smith
.george con-stanza .great
peter.
josh_stinson
smith _.gorne
Run Code Online (Sandbox Code Playgroud)

任何包含其他角色的东西都不行.这是数字或任何其他符号.

Kel*_*vin 66

你正在寻找的正则表达式是 ^[A-Za-z.\s_-]+$

  • ^ 断言正则表达式必须在主题的开头匹配
  • [] 是一个字符类 - 允许在此表达式内匹配的任何字符
  • A-Z 允许一系列大写字符
  • a-z 允许一系列小写字符
  • . 匹配句点而不是字符范围
  • \s 匹配空格(空格和制表符)
  • _ 匹配下划线
  • -匹配破折号(连字符); 我们将它作为字符类中的最后一个字符,因此它不会被解释为字符范围的一部分.我们也可以转义它(\-)并把它放在角色类的任何地方,但那不太清楚
  • +断言前面的表达式(在我们的例子中,是字符类)必须匹配一次或多次
  • $ 最后,这断言我们现在已经到了主题的最后

当您测试正则表达式时,您可能会发现像regexpal这样的工具很有帮助.这使您可以在编写时实时查看正则表达式匹配(或无法匹配)示例数据.

  • 另外,如果你想逐个解释正则表达式,你应该在正则表达式中使用[自由间距模式](http://www.regular-expressions.info/freespacing.html)和`#`注释。它更具可读性,可以与所有注释一起复制到OP的代码中。 (2认同)

Mar*_*der 5

教程中查看正则表达式的基础知识。它只需要两个锚点和一个重复的 字符类

^[a-zA-Z ._-]*$
Run Code Online (Sandbox Code Playgroud)

如果您使用不区分大小写的修饰符,您可以将其缩短为

^[a-z ._-]*$
Run Code Online (Sandbox Code Playgroud)

请注意,空格很重要(它只是一个与任何其他字符一样的字符)。

  • 这将其限制为 ASCII!一般来说,你想要像`^[\p{Upper}\p{Lower} ._-]*$` 或`^[\p{Letter} ._-]*$` 之类的东西。 (4认同)
  • @MRAB 通常是的,但并非所有正则表达式风格都支持这一点(我们不知道 OP 使用的风格)。此外,他甚至可能不支持 unicode 输入。最后,在考虑 unicode 属性之前,OP 应该先学习正则表达式的基础知识。 (3认同)
  • @AaronFranke 包括 `Z` 和 `a` 之间的所有 ASCII 字符,特别是 ``[\]^_` `` (2认同)