我正在使用一些遗留代码,我正在尝试将新的正则表达式添加到验证器的枚举器中,我们的目的标记为“URL”。据我了解,枚举器的每个部分都可以调用一个单独的正则表达式。无论如何,这是我得到的(其他人跟随,因此尾随逗号):
URL("[a-zA-Z0-9\r#;?-\'.:,!/\\s]{1,250}", "Up to 250 letters (upper and lower case), numbers, #, ;, ?, -, ', ., :, comma, !, /, blankspace and carriage return"),
我做了一个简单的JUnit测试,看看它是否正常工作。事实并非如此。
Caused by: java.util.regex.PatternSyntaxException: Illegal character range near index 15
[a-zA-Z0-9
#;?-'.:,!/\s]{1,250}
^
我正在尝试将URL类型的输入限制在1到250个字符之间,这是我认为我正在做的事情,但是Eclipse似乎对这个逗号有所冒犯(我假设逗号是索引15)。我做错了什么?
答案 0 :(得分:8)
问题可能在这里:
?-'
这被解释为从字符?
到字符'
的范围,这是无效的,因为?
具有代码点63,而'
具有代码点39.范围应从低到高。但你可能不打算在这里有一个范围。我想你的意思是字面连字符。
要修复错误,请尝试转义连字符:
?\\-'
错误消息指示符位置错误的原因是正则表达式中的\r
。如果用另一个字符替换换行符,则指示符与不正确的范围对齐:
[a-zA-Z0-9_#;?-'.:,!/\s]{1,250} ^
您也可以使用\\r
代替\r
,以便正确打印错误消息。