2016-02-19 7 views
1

У меня есть следующий код проверки подлинности электронной почты, который использует директиву ng-pattern. Мне нужно включить одинарные кавычки в проверку ошибок, чтобы, например: asd'[email protected] не удалось. Я не хочу использовать угловую директиву по умолчанию, так как последующие .. (точки), ^, запятые и т.д. не удовлетворяютсяОдиночные кавычки в теге AngularJS

<input type="email" name="username" placeholder="[email protected]" ng-model="user.username" ng-maxlength="100" ng-model-options="{ updateOn: blur }" ng-pattern='/^(([^<>()\[\]\\.\,;:\[email protected]"]+(\.[^<>()\[\]\\.,;^:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' required /> 
     <div class="error-container" ng-show="userForm.username.$dirty && userForm.username.$error"> 
      <small class="error" ng-show="userForm.username.$error.required"> 
       Your email is required. 
     </small> 
      <small class="error" ng-show="userForm.username.$error.pattern"> 
       Please input a valid email. 
     </small> 
      <small class="error" ng-show="userForm.username.$error.maxlength"> 
       Your email cannot be longer than 100 characters 
     </small> 

Это может быть видно из сказанного выше, я использую следующий Regex: ng-pattern='/^(([^<>()\[\]\\.\,;:\[email protected]"]+(\.[^<>()\[\]\\.,;^:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'

Вопрос: как включить одиночные кавычки (') так, чтобы они не столкнулись с кавычками тега ng-pattern, а также (^) в Regex. Я искал вокруг, и мне кажется, что я должен использовать & apos, но не знаю, как реализовать. Цените любую помощь.

+0

Используйте '\ x27' вместо' '' и '\ x22' вместо' ''. У вас действительно есть проблемы с '^' тоже? Используйте '\ x5E'. –

+0

Почему бы не используя сборку по проверке электронной почты? http://plnkr.co/edit/ZcQN0WYSoU1gogFo5nic?p=preview –

+1

Скажу, лучше создать урскую директиву здесь. Не используйте сложный шаблон на странице ur html, если вам нужно используйте проверку подлинности электронной почты на более чем одной странице – FarazShuja

ответ

2

Вы можете использовать это немного укороченный вариант:

ng-pattern="/^(([^<>()\[\]\\.,;:\[email protected]^\x22\x27]+(\.[^<>()\[\]\\.,;^:\[email protected]\x22\x27]+)*)|(\x22[^‌​@‌​]+\x22))@((\[[0-9]{1,3}(\.[0-9]{1,3}){3}])|(([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}))$/" 

здесь является regex demo

Изменения:

  • Три \.[0-9]{1,3} сжимаются, поскольку она повторяется 3 раза в (\.[0-9]{1,3}){3}
  • Первый и второй классы отрицательных символов теперь содержат \x27 (') и \x22 (") символы
  • Также добавлены ^ к первому инверсный символьного класса
  • \x22.+\x22 повернута к \x22[^‌​@‌​]+\x22 так, что мы не переполнение в доменной части и остаться в части имени пользователя.
+1

супер произведение .. работает совершенно. –

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