【问题标题】:What is the regular expression to allow uppercase/lowercase (alphabetical characters), periods, spaces and dashes only?什么是只允许大写/小写(字母字符)、句点、空格和破折号的正则表达式?
【发布时间】:2012-11-01 11:08:09
【问题描述】:

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

这些都可以:

Dr. Marshall
sam smith
.george con-stanza .great
peter.
josh_stinson
smith _.gorne

任何包含其他字符的东西都不行。那是数字,或任何其他符号。

【问题讨论】:

    标签: regex


    【解决方案1】:

    您要查找的正则表达式是^[A-Za-z.\s_-]+$

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

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

    【讨论】:

    • .-_ 表示\x2e-\x5f,即类似a-z的范围
    • 另外,如果你想逐个元素地解释正则表达式,你应该在正则表达式中使用free-spacing mode 和# cmets。它更具可读性,可以与所有 cmets 一起复制到 OP 的代码中。
    • 感谢关于- 是班级最后一位的具体提示。我一直在困惑为什么我的表情不匹配。
    • @Esailija . 和 _ 之间的范围应该是什么?我认为在一个真实的例子中没有范围,或者是?
    • [A-z] 呢?
    【解决方案2】:

    在a tutorial 中查看正则表达式的基础知识。它只需要两个anchors 和一个repeated character class:

    ^[a-zA-Z ._-]*$
    

    如果你使用不区分大小写的修饰符,你可以把它缩短为

    ^[a-z ._-]*$
    

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

    【讨论】:

    • 这将其限制为 ASCII!一般来说,你想要^[\p{Upper}\p{Lower} ._-]*$ 或^[\p{Letter} ._-]*$ 之类的东西。
    • @MRAB 通常是的,但并非所有正则表达式风格都支持(而且我们不知道 OP 使用的风格)。另外,他甚至可能不支持 unicode 输入。最后,OP 应该先学习 regex 的基础知识,然后再考虑 unicode 属性。
    • [A-z] 呢?
    • @AaronFranke,包括Z 和a 之间的所有ASCII 字符,特别是[\]^_`
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    相关资源
    最近更新 更多