2011-12-14 3 views
4

Кажется, что недавно JSlint добавила опцию:Толерантность. и [^ ...] in/RegExp/

"Tolerate. and [^ ...] in/RegExp /".

Зачем использовать . или ^ в регулярных выражениях?

+0

Вы должны помнить, что JSLint очень * агрессивно относится к тому, что он рассматривает как плохую практику. Крокфорд в основном полагает, что если есть вероятность ввести ошибки с некоторыми языковыми функциями, это не должно допускаться. –

+0

@TikhonJelvis: И что тогда? Вы должны избегать этого, даже если он находится внутри набора символов, или вы должны выбросить его на улицу и сделать некоторый '(\. | [Abc])' мусор? Я не вижу, как это может привести к ошибкам, если вы не знаете регулярных выражений и не смущены, поскольку это имеет значение, когда внутри набора ... но тогда вам просто нужно освежить свои регулярные выражения, это не проблема с линией скажите, что вы не знаете, о чем говорите. – mpen

+1

@TikhonJelvis: с этой точки зрения, языки компьютера не должны быть разрешены вообще. И вообще никаких компьютеров. И никаких механизмов в этом отношении. И нет ... Какого черта, людей нельзя пустить! –

ответ

5

От the JSLint documentation:

Они соответствуют больше материала, чем можно было бы ожидать, что позволяет злоумышленникам запутать приложения. Эти формы не должны использоваться при проверке в защищенных приложениях.

Это, как представляется, на основе философии специфичен о том, что вы позволяете вместо того, чтобы позволить что-либо (в том числе мультибайтных и непечатных символов) с . или позволяя ничего, кроме х, у и г (как [^…] средства)

От the JSLint mailing list:

обоснованием этого является то, что некоторые люди не понимают, что . и [^...] означают в регулярных выражениях, поэтому он вызывает их код либо принять что-то как действительное, если оно не является, или отклонить то, что действительно.

+0

Использование '^' внутри классов символов кажется особенно понятным. –

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