2016-08-22 4 views
0

У меня есть следующий Regex:Использование Regex в качестве шаблона

var legal = /[a-zA-Z0-9\._\-]+/; 

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

И так, следующие прекрасно работает:

legal.test("a"); // => true 
legal.test("/"); // => false 

Однако, это не работает нормально:

legal.test("a/"); // => true 

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

var legal2 = /[a-zA-Z0-9\._\-]+$/; 

legal2.test("a"); // => true 
legal2.test("a/"); // => false 
legal2.test("a/a"); // => true 

Последняя должна быть false, поэтому $ в конце концов, не всегда помогает ,

Что мне нужно сделать для моего регулярного выражения, чтобы заставить его действовать как «шаблон», для которого строки должны быть проверены?

+6

Вы уже были на полпути. '/^[a-zA-Z0-9 \ ._ \ -] + $ /' (Другими словами - зачем только привязывать его до конца?) – Tomalak

+0

@Tomalak, [это должен быть ответ] (http://meta.stackexchange.com/a/117268/217110) – Liam

+2

слишком поздно ....... – Liam

ответ

4

Вы должны указать начало соответствия строки с помощью вставки (^) в передней части:

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

Это теперь будет соответствовать только строки, содержащие только допустимые символы.

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

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