3

我需要使用具有多个条件的 javascript 验证字符串。我不确定如何使用正则表达式来做到这一点。

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

条件 1:以 18XX 或 1-8XX 或 8XX 开头的任意长度的字符串,其中 X 为 0 到 9 之间的任意数字(包括 0 和 9)。例如: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)。例如:20176、90210-梅尔罗斯

4

2 回答 2

5

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

尝试对每个条件使用这三个,检查所有三个并仅通过那些匹配的。

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

条件2:先删除所有连字符,然后匹配^1?[2-9]\d{7}$

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

希望这可以帮助

编辑

您可能有一个可以匹配此的正则表达式。因为似乎是一个可选字符,让我们先删除它们,但正如@nnnnn在评论-中指出的那样,让我们​​首先检查字符串是否真的以 a开头,如果它确实如此,那么字符串通过验证而无需进一步检查。然后你可以将这三个串在一起形成一个你可以检查的正则表达式-|

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

-?从第一部分中删除了,因为我们已经删除了所有的连字符。

于 2012-10-23T05:45:44.520 回答
3

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

要匹配数字,您可以使用 digits 类\d或仅使用 plain [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

当然,您可以使用可选项目来变得聪明,以提出以下内容:

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

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

试着自己弄清楚其余的。:)

于 2012-10-23T05:45:37.797 回答