2013-10-03 4 views
2

Я использую регулярное выражение для проверки шаблона, за которым следует доля. Я нашел их, и они соответствуют тому, что мне нужно. В целом я хочу соответствовать 1 to 2 номерам, за которыми следует дробь. Как отличаются эти выражения?Соответствие шаблону с долей

/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm 

/^\d+(?:[\xbc\xbd\xbe])$/ugm 

/^\w+(?:\w+)$/ugm 

Мне нужно, чтобы соответствовать следующим образом:

12½ 
1¼ 
11¾ 

но не соответствует ..

111½ 
11111¼ 
0¾ 

ответ

2

Ну начнем с того, [0-9] соответствует любому символу из: (0 к 9) и не то же самое, как \d

\d матчей цифр (0-9) и другие цифры символы, такие как Unicode.

\w соответствует любому символу (письма, номер или подчеркивает)

Хотя эти данные выражения могут соответствовать той же схеме, вы в конечном итоге не в состоянии с помощью 3rd решения. Он будет соответствовать шаблону, например foobar, где, как вы можете видеть, нет символов (0-9) или Unicode в этом шаблоне.

И с быстрым эталоном, ваше решение 2nd составляет около 16% медленнее вашего первого, плюс оно соответствует Unicode и другим цифровым символам.

Я бы придерживался вашего первого выражения и менял его в соответствии с 1-2 номерами символов.

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm 

или даже

/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm 
+0

Спасибо за подробный ответ –

+0

Рад, что я мог бы помочь. – hwnd

1

Попробуйте следующее:

^[1-9][0-9]?[\xbc\xbd\xbe]$ 

[0-9] и \d эквивалентны , \w соответствует символу «слово». Выражение [1-9] соответствует цифре, которая не равна нулю (так как вы специально спросили, как это исключить).

Этот непривлекательный жесткий код для некоторых устаревших 8-битных наборов символов; для будущей совместимости вам следует рассмотреть возможность перехода на Unicode.

+0

это будет соответствовать "0¾" –

+1

Теперь это не так, спасибо за комментирование. – tripleee

+0

Спасибо. Очень полезный ответ. –

1

Вы можете попробовать

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm 
+3

Это должно быть '[1-9] [0-9]'. Вы должны удалить '+'. –

+0

спасибо, что указал. –

+0

Это должно быть '[1-9] [0-9]?'. Он должен соответствовать одно- и двухзначным числам. – John

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