【发布时间】:2012-10-31 07:42:24
【问题描述】:
我想使用正则表达式在 JavaScript 中验证居住地址,但我对正则表达式了解不多,我尝试构建自己的正则表达式 (/^[a-zA-Z\s](\d)?$/),但它似乎无法正常工作。
我想要实现的是允许字母、空格和至少一个数字(这是必需的),并且应该可以插入斜线 /,但它不应该是必需的。
谁能帮我解决这个问题?
【问题讨论】:
标签: javascript regex
我想使用正则表达式在 JavaScript 中验证居住地址,但我对正则表达式了解不多,我尝试构建自己的正则表达式 (/^[a-zA-Z\s](\d)?$/),但它似乎无法正常工作。
我想要实现的是允许字母、空格和至少一个数字(这是必需的),并且应该可以插入斜线 /,但它不应该是必需的。
谁能帮我解决这个问题?
【问题讨论】:
标签: javascript regex
我会帮助您入门,但是随着您习惯了正则表达式,您会发现自己变得更加具体。首先,让我们检查一下您的正则表达式:
/^[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\/]*$/
这显然更复杂,但是当您能够理解这一点时,您就知道您正在顺利理解正则表达式。祝你好运!
【讨论】:
replace 方法,您不会将表达式传递为一个(带引号的)字符串,而在 PHP 中则可以。
/^(?=.*\d)+$/ 然后?
/^(?=.*\d)$/(去掉量词)。但实际上这里更好的解决方案就是/\d/!看,前瞻断言在 previous 案例中很有用,因为您正在制作一种“AND”语句,i.e. yada yada characters AND at至少一位数字字符。前瞻断言的“零宽度”性质使您可以“窥视”前方,但在字符串中“保留您的位置”;因此您可以检查多个条件。但是,在您的最新情况下,您只需要检查一个条件:最简单的是寻找 \d 并删除锚点 ^ 和 $。