The regexp is not robust enough. It will also match `a50` `'%` empty string.

It should be `/^(\d+)([%a-zA-Z]*)$/`. Then an invalid entry will yield a `null` result. 

Getting a 'null' should either trigger:
* a reset of the field 
* reset to previous value
* raise an error popup

The latter being the most user friendly.