我需要使用具有多个条件的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
答案 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 items和groups获得智能,以获得类似的内容:
/^(1-?)?8\d\d$/.test("1-800") == true
您可以使用RegexPal之类的工具来试验正则表达式。我通常只是在Chrome开发者工具控制台中使用它。
尝试自己弄清楚其余部分。 :)