Включите «минус» в это регулярное выражение, как? - PullRequest
32 голосов
/ 24 октября 2010

У меня есть это регулярное выражение:

  var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+$/;

Это для поля имени в проверке формы.

Мне нужно, чтобы можно было набирать такие имена, как эта "Анна-Николь" (обратите внимание на знак минус). В настоящее время знак минус вызывает ошибку.

Мне нужно переделать это регулярное выражение, чтобы знак минус мог быть включен в имя; желательно, чтобы имя также не могло начинаться со знака минус или заканчиваться одним. Допускаются только знаки минус между словами или именами.

Кто-нибудь знает, как это сделать?

Кстати, это JavaScript.

Ответы [ 4 ]

46 голосов
/ 24 октября 2010

Вы должны выйти из знака минус, используя обратную косую черту.

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s\-]+$/;

Чтобы запретить им использовать его в начале или конце, попробуйте что-то вроде этого:

17 голосов
/ 24 октября 2010

На многих диалектах регулярных выражений в классе символов простой или дефис должен быть первым или последним:

/^[-a-zA-ZåäöÅÄÖ\s]+$/
/^[a-zA-ZåäöÅÄÖ\s-]+$/

Отрицательные классы символов:

/^[^-a-zA-ZåäöÅÄÖ\s]+$/
/^[^a-zA-ZåäöÅÄÖ\s-]+$/

С квадратом закрытияКроме скобки, поставьте квадратную скобку спереди и дефис в конце:

/^[]a-zA-ZåäöÅÄÖ\s-]+$/

И если вам необходимо исключить как квадратные скобки, так и дефисы, то:

/^[^]a-zA-ZåäöÅÄÖ\s-]+$/

В этом вопросе одна интерпретация может быть следующей: вы хотите настаивать на буквенных символах вокруг дефисов, и хотите разрешить только пробелы в начале и в конце, и вы можете разрешить апострофы там, где разрешены дефисы, и вы хотите избежать последовательных дефисов.или апострофы.

/^\s*[a-zA-ZåäöÅÄÖ]*([a-zA-ZåäöÅÄÖ]+[-'][a-zA-ZåäöÅÄÖ]+)*\s*$/

Предупреждение: регулярное выражение формально проверено на Perl, а не на JavaScript.

Начало строки, ноль или более пробелов;ноль или более буквенных символов;ноль или более последовательностей «одного или нескольких буквенных символов плюс дефис или апостроф и одного или нескольких буквенных символов», за которыми следует конец строки.Вы можете добавить дополнительные скобки после первого \s* и перед вторым \s*, чтобы захватить полное имя.

Для Anna-nicole первый альфа-член будет соответствовать Ann, адругой альфа-термин будет соответствовать a-nicole.Для Anonymous первый член будет соответствовать всей строке, второй будет пустым.Для O'Reilly первый член будет пустым, а второй будет соответствовать всей строке.Такие имена, как «C - d» и «Who''Me», будут отклонены (повторный дефис или апостроф не допускаются).Это позволило бы Smith-Jones-and-Son в качестве имени и Smith-And-O'Reilly.Это не позволит использовать начальные или конечные дефисы или апострофы.

Если вы хотите разрешить «имя-фамилию», вам понадобится два лота «ядра» регулярного выражения с \s+ между.И т.д.

1 голос
/ 24 октября 2010
/^[a-zA-ZåäöÅÄÖ\s]+[a-zA-ZåäöÅÄÖ\s\-]*[a-zA-ZåäöÅÄÖ\s\]+$/ 

должен сделать это (существует неприятный крайний край имени одного символа, которому это не будет соответствовать. Разрешено одно имя символа или нет?)

0 голосов
/ 05 августа 2014

Это может зависеть от реализации. В Javascript обратная косая черта будет экранирована знаком минус в классе символов, но, например, в Oracle, только поставив знак минус первым или последним в классе символов, добьется цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...