【问题标题】:I'm trying to create a regex validation for a street address that has the first letter of each word capitalized我正在尝试为每个单词的首字母大写的街道地址创建正则表达式验证
【发布时间】:2021-09-28 02:27:07
【问题描述】:

我看过几个例子,这几乎可以工作,但它不允许数字

\b[a-z]*

我正在使用谷歌表单,并想验证当有人输入地址时,单词中的所有首字母都大写。如果我用它来确保所有小写单词都不在其中,它有点工作....但不是真的,因为任何中间有一个大写字母的单词也可以工作。

所以我想验证一下

124 Main Street 
not
124 main Street
or
124 Main street 

【问题讨论】:

    标签: regex google-forms


    【解决方案1】:

    这是一个应该可以工作的通用正则表达式模式:

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

    Demo

    这个正则表达式表示匹配:

    ^           from the start of the address
    \d+         a street number
    (?:
        [ ]     space, followed by
        [A-Z]   a capital first letter
        [a-z]*  zero or more following lowercase letters
    )+
    $           the end of the address
    

    【讨论】:

    • 非常感谢。这适用于街道地址,但后来我意识到我必须允许它也验证 P.O.不以数字开头的框。
    • ...那么你应该问一个新问题。对于您在上面实际提出的问题,您有 2 个答案。
    • 知道了。再次感谢您的帮助。你的回答很完美,但很明显,我没有正确的问题。感谢您提出新问题的建议。
    【解决方案2】:

    您可以尝试否定前瞻断言:

    ^(?!.*\s[a-z][a-z]).+
    

    解释:

    ^ - 锚点 - 匹配字符串的开头

    (?!.*\s[a-z]{2}) - 否定前瞻 - 断言后面的内容不包含 \s 空格后跟两个小写字母(因此没有以小写字母开头的单词)

    .+ - 匹配一个或多个任意字符。

    Regex demo

    【讨论】:

    • 这也是一个好主意,因为它不会关心是否有一个数字开头,但谷歌表单不喜欢它。也许他们正在使用不同的正则表达式版本?我认为它不喜欢环顾四周。我能够接受你的想法并使用
    • 让我再试一次。
    • 这也是一个好主意,因为它不会关心是否有一个数字开头,但谷歌表单不喜欢它。也许他们正在使用不同的正则表达式版本?我认为它可能不喜欢环顾四周。您可以在包含、匹配、不包含和不匹配正则表达式模式之间进行选择
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多