Мне кажется, я понимаю вашу проблему, но поправьте меня, если я ошибаюсь.Ввод действителен, если есть хотя бы одна буква или цифра, верно?Другими словами, если нет буквы или цифры (только специальные символы), то ввод неправильный?
Проверьте, работает ли это:
/^.*[A-Za-z0-9].*$/
Вот мой маленький клочоктест:
import java.util.regex.Matcher
import java.util.regex.Pattern
def pattern = ~/^.*[A-Za-z0-9].*$/
assert pattern.matcher("abc").matches()
assert pattern.matcher("ABC").matches()
assert pattern.matcher("abc123").matches()
assert pattern.matcher("123").matches()
assert pattern.matcher("abc!").matches()
assert pattern.matcher("!abc").matches()
assert pattern.matcher("1!bc").matches()
assert pattern.matcher("!.~").matches() == false
Объяснил:
/ regex start
^ start of string
.* any character (0 or more times)
[A-Za-z0-9] at least 1 letter or number
.* any character (0 or more times)
$ end of string
/ regex end