У меня есть следующее регулярное выражение:Javascript регулярного выражения советы
/^[0-9]{8}([a-z]{1})?|[0-9]{3}-[0-9]{2}-[0-9]{3}([a-z]{1})?/
Я пытаюсь соответствовать следующим шаблонам 12345678, 12345678a (любой 1 символ), 123-45-678, 123-45-678a (любой 1 символ).
Проблема в том, что я вхожу в 123456789, ее все еще действует из-за первого условия [0-9] {8}. Я искал, могу ли я использовать какой-то оператор И, но ничего не нашел. Есть ли способ добавить к моему регулярному выражению для каждого условия, чтобы он также соответствовал длине. Пример [0-9] {8} должен также совпадать с точной длиной? Итак, 12345678 верен, но 123456789 терпит неудачу?
Update 1
Вы, ребята дали мне большие примеры. Это определенно уменьшило мое выражение. Единственная проблема, которую я до сих пор сталкиваюсь является следующим кодом JavaScript:
var regExp = new RegExp(/^\d{3}-?\d{2}-?\d{3}[a-z]?/g);
var isValid = regExp.test('12345678');
isValid is true
var isValid = regExp.test('12345678d');
is valid
the problem is if I enter
var isValid = regExp.test('12345678dd');
is also valid because of 12345678d
Since test() is used to find a match. Is there a way to test the exact phrase of the regular expression so that 12345678dd fails?
Update 2 Хорошо, я полностью пропустил окончание $ в всяком например. Мое плохое спасибо за помощь
почему не '{0-8}'? – reporter
Используйте [якоря] (http://www.regular-expressions.info/anchors.html), также '{1}' никогда не требуется –
Когда я добавляю {0-8} в [0-9] {0-8}, который, как я думаю, ссылаюсь на то, что я не получаю соответствие для 12345678. Я делаю мой тест на http://www.regexpal.com/, поэтому, когда я копирую выражение, он не копирует/^ – adviner