Подтвердить что ты не робот

Включая дефис в символьной скобке регулярных выражений?

$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed');

Когда я использую somehting как test-123, он все равно запускается так, как если дефис недействителен. Я пробовал \- и --

4b9b3361

Ответ 1

Эскапаждение с использованием \- должно быть прекрасным, но вы также можете попробовать поставить его в начале или в конце класса символов. Это должно сработать для вас:

/^[a-zA-Z0-9._-]+$/

Ответ 2

Сбрасывание дефиса с использованием \- является правильным способом.

Я проверил, что выражение /^[a-zA-Z0-9.\-_]+$/ позволяет использовать дефисы. Вы также можете использовать класс \w, чтобы сократить его до /^[\w.\-]+$/.

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

Ответ 3

\- должен работать, чтобы избежать - в диапазоне символов. Можете ли вы процитировать то, что вы тестировали, когда это не показалось? Потому что он работает: http://jsbin.com/odita3

Ответ 4

The\- возможно, не работал, потому что вы передали весь материал с сервера строкой. Если это случай, вы должны сначала избежать \, поэтому серверная программа также может обрабатывать его.

  • В стороне сервера:\\-
  • На стороне клиента:\-
  • В regex (обложки): -

Или вы можете просто положить в и [] скобки.

Ответ 5

Более общий способ сопоставления дефисов заключается в использовании класса символов для дефиса и тире ( "\ p {Pd}" без кавычек). Если вы имеете дело с текстом из разных культур и источников, вы можете обнаружить, что существует больше типов делений, а не только один символ. Вы можете добавить, что внутри выражения []

Ответ 6

Как правило, с символом дефиса (-) в регулярном выражении, важно отметить разницу между экранированием (\-) и не экранированием (-) дефиса, потому что дефис помимо того, что он сам является символом, анализируется для определения диапазона в регулярном выражении.

In the first case, с экранированным дефисом (\-), регулярное выражение будет соответствовать только дефису, как в примере /^[+\-.]+$/

In the second case, не экранируя, например, здесь /^[+-.]+$/, поскольку дефис находится между плюсом и точкой, поэтому он будет сопоставлять все символы со значениями ASCII от 43 (для плюса) до 46 (для точки), поэтому будет включать запятую (значение ASCII 44) как побочный эффект.