java中的ISO持续时间格式验证

java中的ISO持续时间格式验证,java,regex,string,format,duration,Java,Regex,String,Format,Duration,我在谷歌上搜索了一下,但没有找到任何好的解决方案来验证输入字符串是否正确,如果有人有任何想法或解决方案,可能会使用regexp或function,这将非常有帮助 注:持续时间的格式为[-]p[n]DT[n]H[n]M[n][.frac_secs]S,其中n指定元素的值(例如,4H为4小时)。这表示ISO持续时间格式的子集,任何其他持续时间字母(包括有效的ISO字母,如Y和M)都会导致错误 Example 1, input string = "P100DT4H23M59S";

我在谷歌上搜索了一下,但没有找到任何好的解决方案来验证输入字符串是否正确,如果有人有任何想法或解决方案,可能会使用regexp或function,这将非常有帮助

注:持续时间的格式为
[-]p[n]DT[n]H[n]M[n][.frac_secs]S
,其中n指定元素的值(例如,4H为4小时)。这表示ISO持续时间格式的子集,任何其他持续时间字母(包括有效的ISO字母,如Y和M)都会导致错误

Example 1,
input string = "P100DT4H23M59S";
expected output = 100 04:23:59.000000

Example 2,
input string = "P2MT12H";
expected output = error, because the month designator, '2M', isn't allowed.

Example 3,
input string = "100 04:23:59";
expected output = 100 04:23:59.000000
.

java.time.Duration
默认情况下,java.time类在解析/生成文本时使用格式

使用该类

调用方法。遇到错误输入时抛出的陷阱

String input=“P100DT4H23M59S”;
尝试
{
Duration Duration=Duration.parse(输入);
}
捕获(DateTimeParse异常)
{
System.out.println(“错误-错误输入”);
}
Java中的
Duration
类表示与时间线无关的时间跨度,其范围为一般的24小时(而非日历日)、小时、分钟和秒。(有关日历日,请参见课程。)

因此,
Duration#parse
会自动拒绝您不想要的年、月和周输入

String input=“P2MT12H”;
尝试
{
Duration Duration=Duration.parse(输入);
}
捕获(DateTimeParse异常)
{
System.out.println(“错误-错误输入”);
}
运行时:

错误-输入错误


?@WiktorStribiżew,我只想验证输入字符串,而不是您编写的输入字符串=“P100DT4H23M59S”;预期输出=100 04:23:59.000000-这是转换,不是吗?@subodh如果不解析,则无效,否?这是在生产代码中执行此操作的推荐方法。OP和其他未来访问者的注意事项:不要在生产中使用正则表达式(如评论中所建议的)作为此问题的解决方案。但是,为了学习和乐趣,您可以尝试使用regex作为解决此问题的方法。