2014-02-18 2 views
0

мне нужно сопоставить строку, в которой может произойти апостроф или процент только один разRegex опережения в JavaScript

Появление в этом случае

Начиная письмо не должно быть эти два специальных символов могут появляться только один раз

Example 

Valid Cases 
Test' 
Te'st 
Test% 
Te%st 

Invalid Cases 
%Test 
'Test 
Test%' 
Test%% 

Я использую этот способ в настоящее время

/^[a-z ]*(?:[a-z]'|%)?[ a-z]+$/i.test("Tes%t") 

Но в этом я не могу соответствовать Test% или Test «Что я здесь делаю неправильно?

Может кто-нибудь помочь

+0

Оба случая вернуть «истина» для меня. – simonzack

+0

@simonzack: Я получаю false для этого/^ [a-z] * (?: [A-z] '|%)? [A-z] + $/i.test («Тест%»). Я тестирую в консоли разработчика google chrome version 29 – karthick

ответ

1

В /^[a-z ]*(?:[a-z]'|%)?[ a-z]+$/i.test("Tes%") предполагается иметь [ a-z] один или несколько раз, так как это сопровождается +. Если вы замените это на *, он работает нормально. Также необходимо заменить [a-z ]* на [a-z ]+, чтобы запретить случаи слов, начинающихся с одного из двух символов, например. неверный случай, о котором вы упоминали %Test.

Пример, /^[a-z ]+(?:[a-z]'|%)?[ a-z]*$/i.test("Tes%")

scriptular

+0

Спасибо за его работу. – karthick

+0

Можете ли вы объяснить эту часть отдельно. Я не могу понять это «[a-z] один или несколько раз, так как за ним следует +« – karthick

+0

Спасибо еще раз за объяснение. – karthick

1

Вот еще один образец, который работает: /^[^'%]+['%][^'%]*$/

  • ^ начиная с начала строки
  • [^'%]+ матч один или более символов, которые не являются a 'или%
  • ['%] следуют один символ, что это «или%
  • [^'%]*$ и позволяют ноль или более символов, которые не» или% до конца строки
Смежные вопросы