正则表达式验证多个条件

时间:2012-10-23 05:32:36

标签: javascript regex validation

我需要使用具有多个条件的javascript来验证字符串。我不知道如何使用正则表达式。

我需要检查字符串是否包含以下任何条件

条件1 :以18XX或1-8XX或8XX开头的任何长度的字符串,其中X是0到9之间的任何数字(包括0和9)。 Ex:1800abc,812abc-def,1-805-999-9999

条件2 :以NXX或1NXX或1-NXX开头的字符串后跟正好七个不包括连字符的数字,其中N是2到9之间的任意数字(包括2和9) X是0到9之间的任何数字(包括0和9)。 例如:12-999-9999,19009998888,1-212 --- 1-2-3-4-5-6-7 -

条件3 :以XXXXX开头的字符串,其中X是0到9之间的任何数字(包括0和9)。 Ex:20176,90210-Melrose

2 个答案:

答案 0 :(得分:5)

你不可能有一个正则表达式匹配这一切, 呃可能你可以!!见下文

尝试将这三个用于每个条件,检查所有三个条件,并仅传递那些匹配的条件。

条件1:^1?-?8\d{2}.*$

条件2:首先删除所有超额然后匹配^1?[2-9]\d{7}$

条件3:^\d{5}.*$

希望这会有所帮助

修改

您可能只有一个可以匹配的正则表达式。 由于-似乎是一个可选字符,我们先删除它们,但正如评论中 @nnnnn 所指出的那样,首先要检查字符串是否实际开始如果有-,则字符串通过验证而不进一步检查。 然后你可以将这三个字符串与|组成一个正则表达式,你可以检查

^1?8\d{2}.*|1?[2-9]\d{7}|\d{5}.*

我从第一部分删除了-?,因为我们已经删除了所有内容。

答案 1 :(得分:3)

您可能正在寻找替代方案: http://www.regular-expressions.info/alternation.html

要匹配数字,您可以使用数字类\d或仅使用普通[0-9]

例如,对于条件1,您可以尝试将其与:

匹配
 /^18\d\d|1-8\d\d|8\d\d$/.test("1800")  == true
 /^18\d\d|1-8\d\d|8\d\d$/.test("1-800") == true
 /^18\d\d|1-8\d\d|8\d\d$/.test("812")   == true

当然,您可以通过optional itemsgroups获得智能,以获得类似的内容:

 /^(1-?)?8\d\d$/.test("1-800") == true

您可以使用RegexPal之类的工具来试验正则表达式。我通常只是在Chrome开发者工具控制台中使用它。

尝试自己弄清楚其余部分。 :)