2010-10-24 3 views
23

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

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

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

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

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

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

BTW, это JavaScript.

+0

В настоящее время вы разрешаете места на обоих концах - вы тоже хотите их ограничить? И вы хотите объявить вне закона «Нэнси - О'Хара» (с пробелами вокруг тире), и как насчет апострофа в фамилии? –

+0

@ Джонатан: Да, мне тоже хотелось бы, чтобы вы упомянули об этом. – 2010-10-24 19:04:49

ответ

29

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

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

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

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

Остановит ли это их использование минус-знака в начале или конце поля? – 2010-10-24 18:55:42

+0

Замените знак «+» на {1}, чтобы исключить только первый и последний символы из «-» или первый + с {5}, если он разрешен после 5 символов. http://www.addedbytes.com/cheat-sheets/download/regular-expressions-cheat-sheet-v2.png –

+1

Возможно, стоит отметить, что a) минус должен быть размещен в начале или конце и b) что избежать этого не требуется во многих реализациях регулярных выражений – redreinard

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

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

13

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

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

+0

Спасибо Джонатан, но я должен объединить все это? Не знаю, что они означают, просто скажите, какой из них выбрать, пожалуйста :) – 2010-10-24 19:06:20

+1

@Camran: выберите тот, который вам нужен - это, вероятно, один из первых двух. Во вторых два связаны с отрицательным символьным классом, где первый символ после '' '' '' '' ''. Последнее еще более эзотерическое. Тем не менее, они не имеют ни одного из них для решения более сложных проблем, связанных с обеспечением того, чтобы тире отображалось только между словами, не связанными с пробелами, и т. Д. Я полуисследован, чтобы удалить ответ, - но информация о том, где размещать тире в классах символов в регулярных выражениях по-прежнему полезен (надеюсь), хотя он не затрагивает более крупные (и многое другое) сложные проблемы. –

0

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

+2

Успокойте, чтобы дать ОП пример того, что вы имеете в виду? Например, установив свой код? –

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