我试图验证被允许属于多个范围的数字。例如:正则表达式来验证数字的多个范围
一个数字x是有效的,如果它位于150-200之间,或700-750
基本上我要存储在数据库中这些限制,所以我想将它们存储为正则表达式会是处理这个问题的好方法。
我是新来的正则表达式,所以我不能够拿出一个为上述验证。
我试图验证被允许属于多个范围的数字。例如:正则表达式来验证数字的多个范围
一个数字x是有效的,如果它位于150-200之间,或700-750
基本上我要存储在数据库中这些限制,所以我想将它们存储为正则表达式会是处理这个问题的好方法。
我是新来的正则表达式,所以我不能够拿出一个为上述验证。
解决方案:
1[5-9][0-9]|200|7[0-4][0-9]|750
说明:
既然你有一个很好的界定范围,正则表达式是相当简单的。
它可以被分解为两个部分:
所以,放在一起正则表达式将读为
((150 通过 OR 200)OR(700 通过 OR 750))
你的第一数目是150,因此,我们将具有匹配一个 '1' 的第一个数字后跟第二个数字的范围,可能是5到9(你不想少于150,所以4和更少),第三个数字的范围也可以是任何东西0〜9这捕获来自150的所有数字至199
最后NU在第一个范围内是200,所以我们可以找到它。它与该范围内的其他可能性完全不同,因此更容易寻找它,而不是试图想到将它包含在正则表达式范围中的复杂方式。
第二范围遵循相同PATTEN但具有不同的号码。再次,我们通过使用正则表达式范围来查找大部分数字,并查找最后一个数字750,特别是因为它太不同了 - 中间数字为5。如果我们在中等正则表达式范围内包含5,则它将上升到759,这超出了范围。
最后,或零件和正则表达式是准备好了。
调整您的输入。你可能需要用^和$作为开头和结尾的一部分,或者如果你的输入有其他文本围绕着这个数字,扩展你的正则表达式以适当地处理它。
正则表达式不是处理这个问题的好方法* ...你使用的是DBMS,坚持已经在DB中的工具...正则表达式很慢。如果您使用的是SQL,请查看http://stackoverflow.com/questions/1736630/sql-constraint-minvalue-maxvalue ...否则,标记您的DBMS – Mariano
@Mariano变慢可能不是主要问题。如果范围会更复杂创建和维护正则表达式将是噩梦:http://stackoverflow.com/a/20793792/1393766 – Pshemo
@Pshemo我知道,我已经走这条路只是为了好玩。当然,你总是可以[作弊](http://utilitymill.com/utility/Regex_For_Range) – Mariano