How to write a regex that allows any alphabetical characters but only one period (.), comma (,), and apostrophe (') allowed in the string

Viewed 91

I'm trying to write a regex similar to

^[a-zA-Z.{0,1},{0,1}'{0,1}]*

However, this can accept more than one comma, period, and apostrophes.

For example "String.,'" is allowed but "str.,..,,,'''" should not be allowed.

1 Answers

Use

^(?!.*([.,']).*\1)[a-zA-Z.,']*$

See regex proof.

EXPLANATION

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    (                        group and capture to \1:
--------------------------------------------------------------------------------
      [.,']                    any character of: '.', ',', '''
--------------------------------------------------------------------------------
    )                        end of \1
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    \1                       what was matched by capture \1
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  [a-zA-Z.,']*             any character of: 'a' to 'z', 'A' to 'Z',
                           '.', ',', ''' (0 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
Related