The /^[^.\?\\\/\:\*\<\>\|\"\']*[^\?\\\/\:\*\<\>\|\"\']*[^.\?\\\/\:\*\<\>\|\"\']+$/ can be written as /^[^.?\\\/:*<>|"']*[^?\\\/:*<>|"']*[^.?\\\/:*<>|"']+$/ if all unnecesary backslashes are removed.
Then, the /^[^\s].*/ regex just requires a string to start with a non-whitespace char.
So, all you need is to add a (?=\S) lookahead at the start:
Validators.pattern(/^(?=\S)[^.?\\\/:*<>|"']*[^?\\\/:*<>|"']*[^.?\\\/:*<>|"']+$/)
// ^^^^^^
See the regex demo.
It also seems too redundant to have two optional subpatterns at the start, see [^.?\\\/:*<>|"']*[^?\\\/:*<>|"']*. It makes sense to further shrink it to
Validators.pattern(/^(?=\S)[^?\\\/:*<>|"']*[^.?\\\/:*<>|"']+$/)
It matches
^ - start of string
(?=\S) - a lookahead requiring the first char to be a char other than whitespace
[^?\\\/:*<>|"']* - zero or more chars other than ?, \, /, :, *, <, >, |, " and '
[^.?\\\/:*<>|"']+ - one or more chars other than ., ?, \, /, :, *, <, >, |, " and '
$ - end of string.
^(?!.*\*)(?!.*\.$)and add your stuff to it.^(?!.*\*)means doesn't contain a*and(?!.*\.$)means doesn't end with.You can add your other rules the same way. It's a better way to validate lines even if the expressions can be combined somehow.