2015-04-10 5 views
-4

Я ищу регулярное выражение, которое имеет некоторые пользовательские правила. Im не хорошо с регулярным выражением, так что здесь некоторые правила, которые я пытаюсь из:regex для пользовательской проверки имени -emptyspace, ', - only once

  1. Нет Пробелы
  2. только один пробел между словами позволило
  3. нет специальных символов, кроме апострофа (') и дефис (-) и только один, который находится в пределах слов, как О'Брайен

Примеры

John Gray Brian 
John Brian 
John O'Brian 
John O-Brian 
+0

Правило №1 - «нет пробелов». Правило №2 говорит «одно пространство». Что он? Кроме того, ваши примеры собраны вместе; можете ли вы перечислить их отдельно, чтобы мы могли сказать один из следующего? –

ответ

0

Попробуйте это:

var r = /^\w+(?:['-]\w*)?(?: \w+(?:['-]\w*)?)+$/; 
r.test("John Gray") 
// Result: true 

r.test(" ") 
// Result: false 

r.test("John O'Brian") 
// Result: true 

r.test("John O-Brian") 
// Result: true 

r.test("John O-Brian") 
// Result: false 

Я рекомендую вам узнать, как это работает, исследуя JavaScript регулярные выражения; таким образом вы можете это изучить. ;) Try starting here.

1

Используйте это регулярное выражение (см regex101 example) с 'Я' флаг:

^[a-z]+([-'][a-z]+)?([a-z]+([-'][a-z]+)?)*$

Разбивка:

^[a-z]+ старт с любым количеством букв

([-'][a-z]+)? сравниться тире или апострофе, за которыми следуют другие письма

([a-z]+([-'][a-z]+)?)*$ соответствует любому количеству других наименований, каждому из которых предшествует одно пространство, до конца строки