【问题标题】:JavaScript regex to validate an address用于验证地址的 JavaScript 正则表达式
【发布时间】:2012-10-31 07:42:24
【问题描述】:

我想使用正则表达式在 JavaScript 中验证居住地址,但我对正则表达式了解不多,我尝试构建自己的正则表达式 (/^[a-zA-Z\s](\d)?$/),但它似乎无法正常工作。

我想要实现的是允许字母、空格和至少一个数字(这是必需的),并且应该可以插入斜线 /,但它不应该是必需的。

谁能帮我解决这个问题?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我会帮助您入门,但是随着您习惯了正则表达式,您会发现自己变得更加具体。首先,让我们检查一下您的正则表达式:

    /^[a-zA-Z\s](\d)?$/
    

    这里要注意的重要一点是,这个正则表达式最多只能匹配一个两个字符的字符串!字符类[ ... ] 匹配单个 字符:在您的情况下,是字母和空格。您需要将它与所谓的 量词 结合起来,例如 * 表示“零或多个”,+ 表示“一个或多个”,?意思是“零或一”。你在别处使用了一个量词,(\d)?,你说的是“零或一个”数字字符。但你真正想要的看起来更像这样:

    /^[a-zA-Z\s\d\/]+$/
    

    在这里,我们说的是“一个或多个”字母、空格、数字或斜杠(请注意,正斜杠必须使用反斜杠进行转义)。

    最后,你说想要要求“至少一个”数字。这可以通过正则表达式中更高级的构造来实现,称为“环视断言”。你想要这个:

    /^(?=.*\d)[a-zA-Z\s\d\/]+$/
    

    这尤其是一个积极的前瞻性断言,您可以自己研究。不使用前瞻断言的另一种方法是:

    /^[a-zA-Z\s\d\/]*\d[a-zA-Z\s\d\/]*$/
    

    这显然更复杂,但是当您能够理解这一点时,您就知道您正在顺利理解正则表达式。祝你好运!

    【讨论】:

    • 哇。这是一个绝妙的答案,非常感谢您的解释!
    • 顺便说一句:上面的正则表达式示例应该在 PHP 的 preg_match 中工作还是应该重写?我知道 PHP 的正则表达式和 JS 的正则表达式有点相似,但是当涉及到 unicode 正则表达式时,JavaScript 遇到了问题。
    • @Scott - 上述正则表达式在 PHP 中的工作方式应该与在 JS 中相同,除了在 JS 中,例如使用 replace 方法,您不会将表达式传递为一个(带引号的)字符串,而在 PHP 中则可以。
    • 哦,好的,谢谢。现在我正在尝试根据您所写的内容构建另一个正则表达式,它应该检查传递的字符串是否至少有一个数字(如果是 - 通过,否则抛出错误)所以我应该像这样/^(?=.*\d)+$/ 然后?
    • @Scott - 一个更正,首先:/^(?=.*\d)$/(去掉量词)。但实际上这里更好的解决方案就是/\d/!看,前瞻断言在 previous 案例中很有用,因为您正在制作一种“AND”语句,i.e. yada yada characters AND at至少一位数字字符。前瞻断言的“零宽度”性质使您可以“窥视”前方,但在字符串中“保留您的位置”;因此您可以检查多个条件。但是,在您的最新情况下,您只需要检查一个条件:最简单的是寻找 \d 并删除锚点 ^$
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2011-07-14
    • 2012-06-22
    相关资源
    最近更新 更多