2013-10-03 5 views
1

Я делаю регулярное выражение для соответствия всем действительным международным номерам рейса, а также полетным кодам. Согласно Wikipedia, действительный код полета в формате XX(a)NNNN(a), где X = [A-Za-z0-9], a = [A-Za-z] и N = [0-9].Сокращение номера рейса regex

Поскольку я хочу соответствовать как полетным кодам, так и цифрам, я сделал XX(a) и (a) опционально. Первый (a) является полностью необязательным, но первые два XX должны присутствовать для (a), чтобы соответствовать, если они есть. Я сделал следующее регулярное выражение, но я хочу, если это возможно, сократить его.

^(([A-Za-z0-9]{2}([A-Za-z])?)?)([0-9]{4})(([A-Za-z]{1})?)$

Я думал о том, чтобы соответствующие группы, так как некоторые группы, такие как (a) групп до и после цифры одинаковы, чтобы сократить его. Как бы вы сократили это регулярное выражение?

+1

На каком языке/среде регулярных выражений вы используете это? – Jerry

+0

И Javascript, и Ruby. – josh

+0

Страница Википедии больше не дает этот формат (и я подозреваю, что это неправильно, так как номера рейсов/коды не нуждаются в их числовой части для 4 цифр). go http://en.wikipedia.org/wiki/Airline_codes xx (a) n (n) (n) (n) (a) - все символы в скобках являются необязательными. – Jason

ответ

2

Вы можете использовать это как Javascript и Ruby:

/^([^\W_]{2}[a-z]?)?(\d{4})[a-z]?$/i 

Флаг i для нечувствительности к регистру, и вы все еще можете получить номера. Весь код полета находится в первом элементе массива, числа во втором элементе.

Поскольку [^\W] эквивалентно \w[a-z0-9_] т.е. если не считать иностранных символов, с помощью [^\W_] будет означать только [a-z0-9] игнорирующие иностранные символы.

+0

Я пробовал ваше регулярное выражение в [Regexpal] (http://regexpal.com/?flags=gm®ex= % 5E (% 5B% 5E% 5CW_% 5D% 7b2% 7D% 5BA-Z% 5D)% 3F (% 5CD% 7B4% 7D)% 5BA-г% 5D% 3F% 24 & вход = AA1334% 0A1234% 0AAAL1234z% 0AAA12345), но это не сработало ни для чего, кроме номера рейса. – josh

+0

@JoshuaSmock You необходимо проверить нечувствительность к регистру – Jerry

+0

Он по-прежнему не работает для действительного кода полета 'AA1334' – josh

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