Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test filename with regular expression

Tags:

regex

I am trying to test a filename string with this pattern:

^[A-Za-z0-9-_,\s]+[.]{1}[A-Za-z]{3}$ 

I want to ensure there is a three letter extension and allow letters, numbers and these symbols: - _ , \s to precede it but I don't want to have to include all of the letters and characters in the filename. I could just use a * instead of a + but that would match 0 or more which wouldn't be a valid filename.

Here are some examples of how the rule should react:

Correct file name.pdf - true Correct, file name.pdf - true Correct_file_name.pdf - true Correctfilename.pdf - true Incorrect &% file name.pdf - false Incorrect file name- false 

It would be great if someone could point me in the right direction.

Thanks

like image 377
eb_Dev Avatar asked Jul 20 '11 21:07

eb_Dev


1 Answers

You could use these expressions instead:

  • \w - is the same as [a-zA-Z0-9_]
  • \d - is the same as [0-9]
  • \. - is the same as [.]{1}

Which would make your regex:

^[\w,\s-]+\.[A-Za-z]{3}$ 

Note that a literal dash in a character class must be first or last or escaped (I put it last), but you put it in the middle, which incorrectly becomes a range.

Notice that the last [a-zA-Z] can not be replaced by \w because \w includes the underscore character and digits.

EDITED: @tomasz is right! \w == [a-zA-Z0-9_] (confirmed here), so I altered my answer to remove the unnecessary \d from the first character class.

like image 191
Bohemian Avatar answered Oct 03 '22 16:10

Bohemian