invalid escape in pattern HTML/Javascript

12,777

You only need to escape the characters in the character class that must be escaped otherwise, you will always get this error.

Use

pattern="(?:\w:|\\)(\\[\w\s.()~!@#$%^&=+';,{}[\]-]+)+\.exe"

See the JSFiddle

Details:

  • The hyphen must be at the end of the character class
  • The ] inside the character class must be escaped
  • The [ and . must not be escaped
  • The : must never be esacaped, it is never a special character
  • [a-zA-Z0-9_] = \w
  • The pattern is always anchored by default, you need no ^ and $ anchors.
Share:
12,777
Maurice Byrne
Author by

Maurice Byrne

Updated on June 28, 2022

Comments

  • Maurice Byrne
    Maurice Byrne almost 2 years

    I am trying to make an <input> field that uses a pattern to check if the input is a valid windows file path.

    The pattern I have is

    /^(?:[\w]\:|\\)(\\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}\[\]]+)+\.(exe)$/g
    

    However, when putting this into the pattern attribute of an <input> field:

    <input id="path" type="text" pattern="^(?:[\w]\:|\)(\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}[]]+)+\.(exe)$">
    

    An error is displayed in the console saying:

    Pattern attribute value
    ^(?:[\w]\:|\\)(\\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}\[\]]+)+\.(exe)$ is
    not a valid regular expression:  Uncaught SyntaxError: Invalid regular
    expression: /^(?:[\w]\:|\\)(\\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}\[\]]+)+\.(exe)$/:
    Invalid escape
    

    I have tried several ways of writing this pattern, but none seem to work.

  • rinilnath
    rinilnath over 2 years
    Invalid regular expression: /[\w'\,\.()\-\\/\+\!]{1,}/: Invalid escape, I am getting this error for one of my form:input tags regex in pattern attribute, in JSP page. Any suggestions on this escaping of backslash \ ?
  • Wiktor Stribiżew
    Wiktor Stribiżew over 2 years
    @rinilnath Of course. Why did you escape every char in the character class? You only need to escape the characters in the character class that must be escaped. So, something like pattern="[\w\x27,.()/+!-]+" will work.
  • rinilnath
    rinilnath over 2 years
    so i can escape that \ without this?, i tried this in regextester.com it was escaping \, any easier way please
  • rinilnath
    rinilnath over 2 years
    Stribizew, Thanks much, but one small doubt, is it ok to escape the "SPACE" character with backslash or i can just give the space somewhere in regex group
  • Wiktor Stribiżew
    Wiktor Stribiżew over 2 years
    @rinilnath You only need to escape the characters in the character class that must be escaped. Is space a special regex metacharacter? No. So, DON'T.