Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式以匹配阿拉伯日期或正常日期_Java_Regex - Fatal编程技术网

Java 正则表达式以匹配阿拉伯日期或正常日期

Java 正则表达式以匹配阿拉伯日期或正常日期,java,regex,Java,Regex,我有一个场景,用户输入可以是阿拉伯语日期,比如 或2019-07-31等正常日期 我试图找到一个正则表达式匹配这两种情况 现在我正在使用正则表达式将阿拉伯日期与我从中获得的日期匹配 我的代码是 String s1 = "٢٠١٩-٠٣-٣٠"; String regx = "^[\\u0621-\\u064A\\u0660-\\u0669 ]+$"; System.out.println(regx.matches(s1)); 但是它的打印错误,如

我有一个场景,用户输入可以是阿拉伯语日期,比如 或2019-07-31等正常日期

我试图找到一个正则表达式匹配这两种情况

现在我正在使用正则表达式将阿拉伯日期与我从中获得的日期匹配

我的代码是

        String s1 = "٢٠١٩-٠٣-٣٠";
        String regx = "^[\\u0621-\\u064A\\u0660-\\u0669 ]+$";
        System.out.println(regx.matches(s1));

但是它的打印错误,如何修复它,以及如何将普通日期正则表达式添加到该正则表达式中?

您应该在字符串上调用
matches
方法,并使用
regx
作为参数,而不是相反。对于unicode符号,您不需要转义反斜杠。此外,在正则表达式中添加破折号和“normal”(顺便称为“阿拉伯语”)数字,您应该可以得到所需的:

String s1=“٠١٩-٠-٣”;
字符串s2=“03-03-2019”;
字符串regx=“^[\-\u0621-\u064A\u0660-\u06690-9]+$”;
System.out.println(s1.matches(regx));
System.out.println(s2.matches(regx));

请注意,此正则表达式仅验证字符串是否由有效符号组成,而不是验证其格式是否正确。

必须将正则表达式放入匹配项中,以便

s1.matches(regx);

如何使用将s1和s2转换为LocaleDate?@robin我相信将字符串解析为日期是另一个问题,但这里似乎已经给出了答案:我的问题是如何使用相同的格式来解析s1和s2的日期?@robin您不能使用相同的格式。您必须使用类似于
newsimpledateformat(“yyyy-MM-dd”,Locale.forLanguageTag(“ar-SA-nu-arab”)
的东西来解析阿拉伯印度数字,以及
newsimpledateformat(“dd-MM-yyy”)
来解析常规日期。