需要帮助转换多语言正则表达式以检测数值范围

时间:2009-10-16 17:14:17

标签: regex

我创建了一个正则表达式,它匹配包含ascii或arabic字符的任何数值(带有前导或尾随空格)。现在我需要将其修改为仅匹配特定范围的值(例如1900-1950)。

(^\s*-?\d+\s*$)|(^\s*-?[\u0660-\u0669]+\s*$)

我很困惑。有人有什么建议吗?

2 个答案:

答案 0 :(得分:4)

似乎这对正则表达式来说真的很糟糕 - 更简单(更简单的维护!)方法是匹配任何数字,然后在代码中进行简单比较以检查它是否在您想要的范围内

作为旁注,你真的想在比赛中加入空格吗?在parens之外移动\ s *会不会更有意义?

答案 1 :(得分:0)

我不确定你发布了什么,但是如果我理解你的话你有一个数字值的数字之间可以接受的字符类,那么“19fhuerfn4dsfjkw0”将匹配,因为它是1940年的字符间?

所以给定你要匹配的字符类([class]),你可以这样做吗?

1 [类] 9 [类] [0-4] [类] [0-9]

如果您的号码范围与基数10不完全一致,您可能需要修改几个... ...想要将其设置为1900-1950而不是1900-1949,您需要包含一个单独的案例以50结尾。

编辑添加: 通过字符解析输入字符可能更容易。如果它不是数字,请将其剥离。当删除非数字时,将剩余字符解析为整数并进行范围检查。然后检查所有被删除的字符是否与您的接受类匹配正则表达式。

19sdfh2djf3 / sdfhdjf + 1923 / 匹配(sdfhdjf)&& (1900< = 1923< = 1950)