Ok, first you should probably write your regex as:
[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF \.!?:)(,;1234567890%\-_#]+$
Here %\-_
inside [...]
means %
or -
or _
while your %-_
means “any symbol with the code from %
to _
. Try /[%-_]/.exec(")")
and see what I mean: the )
symbol is in that range. I also put \.
which highlights that it is .
symbol, not “any symbol”, although just .
works correctly in this case.
Now, you’d like to allow emails in the text. Well it’s not a simple task, but for simple cases you may use something like
[\w\-]+@[\w\-\.]+\.\w+
Anyway once you pick the email rexep (may be one of those complicated solutions), you should concatenate it to your regexp like this (I use the simple one shown above):
(?:[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF \.!?:)(,;1234567890%\-_#]|[\w\-]+@[\w\-\.]+\.\w+)+$
This doesn’t handle whitespace, though, meaning that this doesn’t check if there are spaces/tabs/punctuation before and after the email. This means that this text will be valid, too:
<arabic> <arabic> <arabic>email<arabic> <arabic>.
/\ /\ no whitespace or punctuation here
4
solved allow specif regex only in a block