/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
// With the one below, all tests pass with TRUE
// public static String regex = "[\\p{L}\\p{M}\\p{N}\\p{P}\\p{Z}\\p{S}\\p{C}]*" ;
public static String regex
= "[\\p{L}\\p{M}\\p{N}\\p{P}\\p{Z}\\p{S}\\p{C}]" ; {
testUserId(userId); // false - Correct as we test an empty string with an at-least-one-char regex
userId = "æÆbBcCćĆčČçďĎdzDzdzsDzs";
testUserId(userId); // false - Correct as we only match 1 character string, others fail
userId = "test123";
testUserId(userId); // false - see above
userId = "abcxyzsd";
testUserId(userId); // false - see above
testZip(zip); // true - OK, 7-symbol string matches against [...]{0,10} regex
zip = "331fsdfsdfasdfasd02c3";
testZip(zip); // false - OK, 21-symbol string does not match a regex that requires only 0 to 10 characters
zip = "331";
testZip(zip); // true - OK, 3-symbol string matches against [...]{0,10} regex
}
public static void testUserId
(String userId
){ boolean pass = true;
if ( !stringValidator(userId, regex)) {
pass = false;
}
}
public static void testZip
(String zip
){ boolean pass = true;
String regex1
= regex
+ "{0,10}"; if (!zip.matches("\\s*") && !stringValidator(zip, regex1)) {
pass = false;
}
}
public static boolean stringValidator
(String str,
String regex
) { Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
return matcher.matches();
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CgkvLyBXaXRoIHRoZSBvbmUgYmVsb3csIGFsbCB0ZXN0cyBwYXNzIHdpdGggVFJVRQoJLy8gcHVibGljIHN0YXRpYyBTdHJpbmcgcmVnZXggPSAgIltcXHB7TH1cXHB7TX1cXHB7Tn1cXHB7UH1cXHB7Wn1cXHB7U31cXHB7Q31dKiIgOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgcmVnZXggPSAgIltcXHB7TH1cXHB7TX1cXHB7Tn1cXHB7UH1cXHB7Wn1cXHB7U31cXHB7Q31dIiA7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTdHJpbmcgdXNlcklkID0gIiI7CiAgICAJdGVzdFVzZXJJZCh1c2VySWQpOyAvLyBmYWxzZSAtIENvcnJlY3QgYXMgd2UgdGVzdCBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhbiBhdC1sZWFzdC1vbmUtY2hhciByZWdleAogICAgCXVzZXJJZCA9ICLDpsOGYkJjQ8SHxIbEjcSMw6fEj8SOx7PHsmR6c0R6cyI7CiAgICAJdGVzdFVzZXJJZCh1c2VySWQpOyAvLyBmYWxzZSAtIENvcnJlY3QgYXMgd2Ugb25seSBtYXRjaCAxIGNoYXJhY3RlciBzdHJpbmcsIG90aGVycyBmYWlsCiAgICAJdXNlcklkID0gInRlc3QxMjMiOwogICAgCXRlc3RVc2VySWQodXNlcklkKTsgLy8gZmFsc2UgLSBzZWUgYWJvdmUKICAgIAl1c2VySWQgPSAiYWJjeHl6c2QiOwogICAgCXRlc3RVc2VySWQodXNlcklkKTsgLy8gZmFsc2UgLSBzZWUgYWJvdmUKCiAgICAJU3RyaW5nIHppcCA9ICJpwqvimaPilIJheHkiOwogICAgCXRlc3RaaXAoemlwKTsgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgLSBPSywgNy1zeW1ib2wgc3RyaW5nIG1hdGNoZXMgYWdhaW5zdCBbLi4uXXswLDEwfSByZWdleAogICAgCXppcCA9ICIzMzFmc2Rmc2RmYXNkZmFzZDAyYzMiOwogICAgCXRlc3RaaXAoemlwKTsgICAgICAgICAgICAgICAgIC8vIGZhbHNlIC0gT0ssIDIxLXN5bWJvbCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYSByZWdleCB0aGF0IHJlcXVpcmVzIG9ubHkgMCB0byAxMCBjaGFyYWN0ZXJzCiAgICAJemlwID0gIjMzMSI7ICAgICAgICAgIAoJICAgIHRlc3RaaXAoemlwKTsgICAgICAgICAgICAgICAgLy8gdHJ1ZSAtIE9LLCAzLXN5bWJvbCBzdHJpbmcgbWF0Y2hlcyBhZ2FpbnN0IFsuLi5dezAsMTB9IHJlZ2V4CgogICAgfQogICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RVc2VySWQoU3RyaW5nIHVzZXJJZCl7CiAgICAJYm9vbGVhbiBwYXNzID0gdHJ1ZTsKICAgIAlpZiAoICFzdHJpbmdWYWxpZGF0b3IodXNlcklkLCByZWdleCkpIHsKICAgICAgICAJcGFzcyA9IGZhbHNlOwogICAgCX0KCSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFzcyk7Cgl9CglwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFppcChTdHJpbmcgemlwKXsKICAgIAlib29sZWFuIHBhc3MgPSB0cnVlOwogICAgCVN0cmluZyByZWdleDEgPSByZWdleCArICJ7MCwxMH0iOwogICAgCWlmICghemlwLm1hdGNoZXMoIlxccyoiKSAmJiAhc3RyaW5nVmFsaWRhdG9yKHppcCwgcmVnZXgxKSkgewogICAgICAgIAlwYXNzID0gZmFsc2U7CgkgICAgfQoJICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXNzKTsKCX0KCglwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3RyaW5nVmFsaWRhdG9yKFN0cmluZyBzdHIsIFN0cmluZyByZWdleCkgewoJICAgIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZShyZWdleCk7CgkgICAgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKHN0cik7CgkgICAgcmV0dXJuIG1hdGNoZXIubWF0Y2hlcygpOwoJfQoJCn0=