4

I am developing an application a where user need to supply local file location or remote file location. I have to do some validation on this file location.
Below is the requirement to validate the file location.

Path doesn't contain special characters * | " < > ?.
And path like "c:" is also not valid.

Paths like

  • c:\,
  • c:\newfolder,
  • \\casdfhn\share

are valid while

  • c:
  • non,
  • \\casfdhn

are not.

I have implemented the code based on this requirement:

String FILE_LOCATION_PATTERN = "^(?:[\\w]\\:(\\[a-z_\\-\\s0-9\\.]+)*)";
String REMOTE_LOCATION_PATTERN = "\\\\[a-z_\\-\\s0-9\\.]+(\\[a-z_\\-\\s0-9\\.]+)+";

Pattern locationPattern = Pattern.compile(FILE_LOCATION_PATTERN);
Matcher locationMatcher = locationPattern.matcher(iAddress);
if (locationMatcher.matches()) {
    return true;
}

locationPattern = Pattern.compile(REMOTE_LOCATION_PATTERN);
locationMatcher = locationPattern.matcher(iAddress);

return locationMatcher.matches();

Test:

worklocation'        pass
'C:\dsrasr'          didnt pass  (but should pass)
'C:\saefase\are'     didnt pass  (but should pass)
'\\asfd\sadfasf'     didnt pass  (but should pass)
'\\asfdas'           didnt pass  (but should not pass)
'\\'                 didnt pass  (but should not pass)
'C:'                 passed infact should not pass

I tried many regular expression but didn't satisfy the requirement. I am looking for help for this requirement.

1

2 Answers 2

4

The following should work:

([A-Z|a-z]:\\[^*|"<>?\n]*)|(\\\\.*?\\.*)

The lines highlighted in green and red are those that passed. The non-highlighted lines failed.

Bear in mind the regex above is not escaped for java

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Which tool is this?
1

from your restrictions this seems very simple.

^(C:)?(\\[^\\"|^<>?\\s]*)+$

Starts with C:\ or slash ^(C:)?\\

and can have anything other than those special characters for the rest ([^\\"|^<>?\\s\\\])*

and matches the whole path $

Edit: seems C:/ and / were just examples. to allow anything/anything use this:

^([^\\"|^<>?\\s])*(\\[^\\"|^<>?\\s\\\]*)+$

8 Comments

its not necessary to have C: it can be anything
I also tried this I am getting error: java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 27 ^([^"|^<>?\s])*([^"|^<>?\s])*$ ^
I also tried mine on internet it works but didnt in java using pattern class and matcher
in java did you guys make sure to double escape? the "\" need to be "\\" in java. Edited the answer to use double escapes
yeah i made that changes.."^([^\\\"|^<>?\\s])*\\\([^\\\"|^<>?\\s])*$".. it works fine.. thanks
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.