2013-11-13 2 views
2

У меня есть сценарий входа, где шаблон ввода выглядит следующим образом:Регулярное выражение регулярное выражение шаблон в JavaScript для входов с запятыми

var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i; 

Мой вход в следующих разрешенных типов:

  • Los Анджелес, Калифорния
  • Лос-Анджелес, Калифорния (имеет место (ы) между струнной текстом)
  • Лос-Анджелес, Калифорния, США
  • Лос-Анджелес, Калифорния, США (имеет место (а) между струнной текстом)
  • Лос-Анджелес, Калифорния, США (имеет место (а) между струнной текста и, возможно, после окончания текста)

Ниже типы входных (те, с дополнительными, не проходя тест:

  • Лос-Анджелес, Калифорния, США
  • Лос-Анджелес, Калифорния, США (имеет место (а) между струнной текстом)
  • Los Angeles, CA, USA (имеет пробелы между строковым текстом и, возможно, после окончания текст)

Может ли кто-нибудь сказать мне, что я здесь делаю неправильно? Любая помощь будет оценена! Благодаря!

И да, я новичок в регулярном выражении и js.

Полный код, используемый для тестирования:

if (str.match(locationstring)){    
console.log("Match pattern str!");   
type = 2;  
}else{   
alert("No match str!");    
return;   
} 
+0

Try '/^[\ s \ S] +, [\ s \ S] + ([^, ]? [\ s \ S] +) * $/'и посмотреть, работает ли это для вас – megawac

ответ

1

Ваше регулярное выражение может соответствовать только, в одном положении - exactyl где запятая в регулярном выражении есть. Итак, очевидно, что он не будет соответствовать строкам, которые включают несколько;)

Это регулярное выражение будет соответствовать всем вашим тестовым случаям (и, в отличие от ваших, соответствует городам, которые не имеют пробелов в своих именах, - они существуют, вы знаете ^^):

/^\w+(\s*\w+)?\s*,\s*\w+\s*(,\s*\w+)?$/i?

(он по-прежнему не соответствует contries или состояний, которые включают whistespace - если это необходимо, скажите мне

+0

Да, это позволяет вводить такие данные, как« Сиэтл »,« Сиэтл »,« Сиэтл, Вашингтон »и т. д. – harshalizee

+0

Это действительно , нет, 'Сиэтл,' магазин не будет согласован, если я не ошибаюсь). Shpouldn't это? Тогда что должно быть подобрано, а что не должно? –

+0

Сиэтл, , кажется, разрешен до – harshalizee

2
var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i; 
               ^^^^ 

Здесь вы явно отвергая?. любые commata (с negated character class). Каждая строка, содержащая более одной запятой, не содержит этого правила.

Кажется, вы на самом деле хотите, чтобы запятая с последующим дополнительным пробелом в этом месте:

var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+(,\s*[a-z]+)*$/i; 
+0

Спасибо! У меня создалось впечатление, что в начале обозначается начало символа. Этот soln решил мою первоначальную проблему, но все же позволяет через такие материалы, как «Сиэтл» и Сиэтл ». – harshalizee

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