1

I've been working on a regex problem for angularJs ng-pattern which needs:

  1. Cannot be blanks
  2. A minimum of 1 character and a maximum of 32 characters
  3. Spaces ONLY are not allowed
  4. Acceptable special characters(!@#$%&*-+=[]:;',.? )
  5. The answer is not case sensitive
  6. Combination of &# is not allowed
  7. Spaces at the beginning and the end of the answer should be trimmed.

This is my solution which covers all requirement but 6th:

([^a-zA-Z0-9!@#$%& *+=[\]:;',.?-])|(^\s*$)

Do you guys have any ideas?

NobodyNada
  • 7,529
  • 6
  • 44
  • 51
user1070111
  • 59
  • 2
  • 7
  • Can you explain what "5. The answer is not case sensitive" means? – Robo Mop Apr 29 '18 at 18:11
  • I think you need `/^(?!\s*$)(?:(?!)[a-zA-Z0-9!@#$%&*+=[\]:;',.?\s-]){1,32}$/`. However, I have no idea what your Req. 7 means. `ng-pattern` does not trim input text. – Wiktor Stribiżew Apr 29 '18 at 18:18
  • the only one that I couldn't figure out is #6 req. I can do 'string'.trim() to handle #7. And for #5, a-zA-Z covers that. – user1070111 Apr 29 '18 at 19:39
  • Ok, did you try my suggestion? See https://regex101.com/r/AuTmSj/1. It can also be [`^(?!\s*$)(?!.*)[a-zA-Z0-9!@#$%&*+=[\]:;',.?\s-]{1,32}$`](https://regex101.com/r/AuTmSj/2) – Wiktor Stribiżew Apr 29 '18 at 20:00
  • Omg, that works great. Thank you, Wiktor. So, put the ?! at the beginning means to match the negate? – user1070111 Apr 29 '18 at 21:07

1 Answers1

1

You may use

/^(?!\s*$)(?!.*&#)[a-zA-Z0-9!@#$%&*+=[\]:;',.?\s-]{1,32}$/

See the regex demo.

Details

  • ^ - start of string
  • (?!\s*$) - no 0+ whitespaces from start till end of string allowed
  • (?!.*&#) - no &# allowed after any 0+ chars
  • [a-zA-Z0-9!@#$%&*+=[\]:;',.?\s-]{1,32} - 1 to 32 allowed chars: ASCII digits, letters, whitespaces and some punctuation/symbols
  • $ - end of string.
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563