Подтвердить что ты не робот

Включить "минус-знак" в это регулярное выражение, как?

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

/^[-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+ между ними. Etc.

Ответ 3

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

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

Ответ 4

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