2017-02-22 73 views
0

У меня есть текстовое поле, в котором я ограничивал пользователь ввести значения, кроме буквенно-цифрового ключа и слэша с последующимЕсли все символы не являются комбинацией нуля и специальными символами

regex = /[^a-zA-Z0-9/]+$/g; 

, так что пользователь не может ввести специальный символ, отличный от косой черты /.

Теперь есть новый сценарий, в котором я не хочу, чтобы пользователь ввел либо из этой комбинации:

  • 0
  • 00/00/000/
  • 0////
  • ////
  • 000/000/
  • etc

Размер входного входного текста 20, поэтому любая длина может быть возможно мое беспокойство любые другие, чем 0 или / действует символов.

Они должны быть действительными:

  • 01/001/01/
  • 01
  • 1
  • a1/12
  • 00/10/00/1
  • 1/1/1/1/00
  • 0/00/0

Все, кроме нуля или косой черты на входе, является действительным. Даже одно вхождение алфавита или число, большее нуля, делает его действительным.

Любая помощь очень заметна. Регулярные выражения приветствуются. Спасибо заблаговременно.

+0

Ваш последний пример допустимого ввода '0/00/0', кажется, противоречит описанию? Это только тогда, когда слэш заканчивается? – whrrgarbl

+0

@whrrgarbl это не тот случай, символы могут заканчиваться где угодно между от одного до двадцати, не имеет значения, равен ли конечный символ нулю или косой чертой, их должно быть одно ненулевое число или любой алфавит – Mavericks

+0

Итак, ... ваш последний пример должен * не * на самом деле совпадать? – whrrgarbl

ответ

0

Во-первых, ваш якорь находится в неправильном месте, отрицая символы, которые Вы хотите разрешить:

regex = /[^a-zA-Z0-9/]+$/g; 
     ^

Переместить его здесь:

regex = /^[a-zA-Z0-9/]+$/g; 
     ^

Вот решение. Я указал, что я добавил с «+»:

regex = /^(?![0/]+$)[a-zA-Z0-9/]+$/g; 
      ++++++++++ 

(?!foo) модель известна как отрицательного предпросмотра, который поддерживает Javascript. Он терпит неудачу, если предстоящие персонажи делают матч foo. Поэтому, если предстоящие символы - все нули или слэши, то совпадение не будет выполнено. И затем он переходит к проверке того, что все символы являются буквенно-цифровыми или косой чертой.

Как заметил @Mavericks, я не знаю, что происходит с вашим последним случаем, «0/00/0».

0

Попробуйте это:

regex = /(^[^a-zA-Z0-9/]+$)|(^[0/]+$)/g

Это просто добавляет второй матч группы в конце: (^[0\/]+$), чтобы проверить, если он полностью 0 и слэш.