经过大量尝试,我设法创建了以下正则表达式。我想用它来防止IP的垃圾邮件。
([0-9]{1,3}(\.+|\s+)){3}[0-9]{1,3}
如果写得正确,这将捕获所有的ips
例如8.8.8.8
然而,它与"8. 8. 8. 8"
或"8 .8 .8 .8"
不匹配
\s*
但是我似乎没有让它工作,任何人都可以帮助我,并解释我需要放置\s*
以忽略其间的空间
关心Jurre
答案 0 :(得分:3)
您可以使用此正则表达式在IP地址中的任何位置允许白色间距:
^\s*([0-9]{1,3}\s*\.\s*){3}[0-9]{1,3}\s*$
答案 1 :(得分:1)
^\s*(?:(?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)\s*(?:\.\s*(?=[0-9])|(?![0-9]))){4}$
应该这样做。
要打破这种局面,
(?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)
匹配[0,255]范围内最多三位数的任何非负十进制整数。\s*
匹配零个或多个空格。(?:\.\s*(?=[0-9])|(?![0-9]))
匹配点和空格后跟更多数字或数字结尾{4}
需要重复四次为了使其更具可读性,您可以将其分解:
String INT_IN_0_TO_255 = "(?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)";
String OPTIONAL_SPACE = "\\s*";
String DOT_BEFORE_MORE_NUMBERS = "(?:\.\s*(?=[0-9])|(?![0-9]))";
String NUMERIC_IP_ADDRESS =
"^"
+ OPTIONAL_SPACE
+ "(?:"
+ INT_IN_0_TO_255
+ OPTIONAL_SPACE
+ DOT_BEFORE_MORE_NUMBERS
+ "){4}$";