Проверка регулярных выражений - Grails
Я довольно новичок в Grails.. У меня сейчас есть небольшая проблема с проверкой соответствия. Я хотел, чтобы поле могло принимать комбинацию буквенно-цифровых и специальных символов, только букв и цифр, и если пользователь вводит только специальные символы, система должна выдавать пользователю сообщение об ошибке. Я использовал ограничения совпадений для проверки данных, и мне было трудно, как я могу установить регулярное выражение, где поле не будет принимать входные данные только со специальными символами. пожалуйста, помогите мне.. большое спасибо за то, что поделились своими знаниями.
2 ответа
Я думаю, что понимаю вашу проблему, но поправьте меня, если я ошибаюсь. Ввод действителен, если есть хотя бы одна буква или цифра, верно? Другими словами, если нет буквы или цифры (только специальные символы), то ввод неверен?
Посмотрите, работает ли это:
/^.*[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
Я не знаю, поддерживает ли grails lookaround, но если это так, то это регулярное выражение будет работать для вас:
/(?=^[\pL\pN!:;]+$)(?!^[!:;]+$)/
объяснение:
/ : regex delimiter
(?= : begin positive lookahead
^ : start of string
[\pL\pN!:;]+ : a letter, a digit or a special char one or more times
$ : end of string
) : end of lookahead
(?! : begin negative lookahead
^ : start of string
[!:;]+ : a special char one or more times
$ : end of string
) : end of lookahead
/ : regex delimiter