2014-01-18 3 views
1

Мне нужен шаблон регулярного выражения для поля имени, в котором я хочу разрешить символ a-z, A-Z и '- и пробел. В настоящее время я использую этот код, но он дает ошибку.шаблон регулярного выражения для имени не работает в adobe cq5

final String regexpattern = "/[a-zA-Z\s-']*/"; 
+0

Это правильное регулярное выражение. какую ошибку вы получаете? – MElliott

ответ

1

Вы должны добавить еще \ перед тем \s, и добавить ^ и $ для матча начинаются и заканчиваются.

final String regexpattern = "/^[a-zA-Z\\s'-]*$/"; 
+0

Привет, xdazz, спасибо, что он отлично работает, может помочь мне и для некоторого regex patteren, так как я понятия не имею об этом, как если бы я должен был разрешить все символы, исключая^<>% *() # !? – user2142786

0

Ваше регулярное выражение (когда он больше не имеет неправильный формат - не смотрите ниже, как исправить это) всегда будут соответствовать, потому что вы не используете якорь (^ - начало строки, а $ - конец строки) и используйте квант * (соответствуют 1 или более символам, соответствующим предыдущему подшаблону, как можно больше).

Однако, просто добавив ^ и $ не исправит картину, потому что вы используете 1 обратный слэш с \s внутри строки C (т.е. внутри строкового литерала «...»). Обратная косая черта рассматривается как escape-символ и не учитывается, так как "\s" является недопустимой управляющей последовательностью. Внутри класса символов в регулярном выражении (т. Е. В [...]) дефис создает диапазон . Ваш s-' создает диапазон от s (разуметельный код 115) до ' (dec. Code 39). Начиная с в диапазоне внутри символьного класса коды должны идти от самого низкого до самого высокого, выдается ошибка.

Вы можете просто использовать

final String regexpattern = "/^[a-zA-Z\\s-']*$/"; 

Это возможно потому, что дефис после сокращенного класса \s не создает диапазон и считается буквальным. Как наилучшая практика, вы можете перенести ее в конец класса персонажа, как это делал xdazz.

Что касается вашего дополнительного вопроса в комментарии:

я должен позволить всем символам за исключение ^<>%*()#!?

Просто используйте отрицание класса символов: пару квадратных скобок с исходным ^ внутри это:

final String regexpattern = "/^[^<>%*()#!^?]*$/"; 
           1 2  3 

Здесь первая ^ является якорь начала строки, а второй карет - это отрицание символов внутри класса символов. Третий карет - это буквальный символ ^.

Смежные вопросы