Ответ 1
Эскапаждение с использованием \-
должно быть прекрасным, но вы также можете попробовать поставить его в начале или в конце класса символов. Это должно сработать для вас:
/^[a-zA-Z0-9._-]+$/
$.validator.addMethod('AZ09_', function (value) {
return /^[a-zA-Z0-9.-_]+$/.test(value);
}, 'Only letters, numbers, and _-. are allowed');
Когда я использую somehting как test-123
, он все равно запускается так, как если дефис недействителен. Я пробовал \-
и --
Эскапаждение с использованием \-
должно быть прекрасным, но вы также можете попробовать поставить его в начале или в конце класса символов. Это должно сработать для вас:
/^[a-zA-Z0-9._-]+$/
Сбрасывание дефиса с использованием \-
является правильным способом.
Я проверил, что выражение /^[a-zA-Z0-9.\-_]+$/
позволяет использовать дефисы. Вы также можете использовать класс \w
, чтобы сократить его до /^[\w.\-]+$/
.
(Полагая дефис, последний в выражении, фактически заставляет его не требовать экранирования, так как тогда он не может быть частью диапазона, однако вы все равно можете привыкнуть к тому, чтобы всегда избегать его.)
\-
должен работать, чтобы избежать -
в диапазоне символов. Можете ли вы процитировать то, что вы тестировали, когда это не показалось? Потому что он работает: http://jsbin.com/odita3
The\- возможно, не работал, потому что вы передали весь материал с сервера строкой. Если это случай, вы должны сначала избежать \, поэтому серверная программа также может обрабатывать его.
Или вы можете просто положить в и [] скобки.
Более общий способ сопоставления дефисов заключается в использовании класса символов для дефиса и тире ( "\ p {Pd}" без кавычек). Если вы имеете дело с текстом из разных культур и источников, вы можете обнаружить, что существует больше типов делений, а не только один символ. Вы можете добавить, что внутри выражения []
Как правило, с символом дефиса (-
) в регулярном выражении, важно отметить разницу между экранированием (\-
) и не экранированием (-
) дефиса, потому что дефис помимо того, что он сам является символом, анализируется для определения диапазона в регулярном выражении.
In the first case
, с экранированным дефисом (\-
), регулярное выражение будет соответствовать только дефису, как в примере /^[+\-.]+$/
In the second case
, не экранируя, например, здесь /^[+-.]+$/
, поскольку дефис находится между плюсом и точкой, поэтому он будет сопоставлять все символы со значениями ASCII от 43 (для плюса) до 46 (для точки), поэтому будет включать запятую (значение ASCII 44) как побочный эффект.