2013-01-07 2 views
1

мне нужно регулярное выражение для проверки поля веб-формы, которая должна содержать номер AS в asdot обозначения, как описано в RFC 5396:регулярное выражение для проверки номеров AS

asdot

refers to a syntax scheme of representing AS number values less 
    than 65536 using asplain notation and representing AS number 
    values equal to or greater than 65536 using asdot+ notation. 
    Using asdot notation, an AS number of value 65526 would be 
    represented as the string "65526" and an AS number of value 65546 
    would be represented as the string "1.10". 

Я хотите использовать Javascript RegExp object и Java EE javax.validation.constraints.Pattern с регулярным выражением.

+0

Это практически не отличается от проверки положительного числа с дополнительной дробной частью. Что вы пробовали и как это не сработало? – tripleee

+0

@tripleee Я пробовал некоторые вещи, но я не эксперт по регулярному выражению, и я обнаружил, что тестирование простых числовых диапазонов является настолько сложным (http://www.regular-expressions.info/numericranges.html) – logoff

ответ

3

Вот Javascript регулярное выражение, которое должно делать то, что вам требуется:

/^([1-5]\d{4}|[1-9]\d{0,3}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])(\.([1-5]\d{4}|[1-9]\d{0,3}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]|0))?$/ 

Предположения:
номера, начинающиеся 0. запрещены.
Номера с нулем после точки допускаются, как я предполагаю, например. что 65536 представлен как 1.0. Ведущие нули не допускаются в число после точки, например. 1.00009 недействителен.
Максимальное значение 4-байтового номера AS равно 4294967295, которое равно 65536*65535 + 65535, то есть 65535.65535 в обозначении asdot.

Как Javascript RegExp роект:

var asdot = new RegExp("^([1-5]\\d{4}|[1-9]\\d{0,3}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])(\\.([1-5]\\d{4}|[1-9]\\d{0,3}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]|0))?$"); 

console.log(asdot.test('65535.65535')) // true 

Как Java Pattern:

Pattern asdot = Pattern.compile("^([1-5]\\d{4}|[1-9]\\d{0,3}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])(\\.([1-5]\\d{4}|[1-9]\\d{0,3}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]|0))?$"); 

System.out.println(asdot.matcher("65535.65535").matches()); // true 
+0

проверено. просто эпический !! Большое вам спасибо, это то, что я хочу. ваши предположения верны на основе RFC 5396. – logoff

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