нужно чтобы регулярное выражение запрещало писать пробелы и все символы кроме нижнего подчеркивания и дефиса , запрет пробелы и все остальные символы. Так же разрешить писать буквы английские в любом регистре. Цифры тоже разрешить. Я смог додуматься до этого но оно не работает
$scope.matchPatternPassword = new RegExp("[A-Za-z0-9 !@#$%^&*()_]");
попробуйте так:
new RegExp("[-_a-zA-Z0-9]")
Если нужно запретить ввод пробелов, зачем добавлять его в символьный класс? То же касается символов !@#$%^&*() - если они "под запретом", их тоже необходимо удалить из символьного класса.
Так как вам необходимо проверить целую строку на наличие букв и цифр ASCII + - и _, символьный класс нужно квантифицировать и заключить в метасимволы ^ (начало строки) и $ (конец строки).
В общем, используйте
$scope.matchPatternPassword = /^[A-Za-z0-9_-]*$/;
Что равносильно написанию
$scope.matchPatternPassword = /^[\w-]*$/;
где
^ - начало строки [\\w-]* - 0 и более (*, для 1 и более повторений используйте +) букв и цифр ASCII, а также знаков _ и -$ - конец строкиНе забудьте добавить
ng-trim="false"
иначе можно вводить сколько угодно пробелов в начале и конце строки.
function formCtrl($scope){
$scope.matchPatternPassword = /^[\w-]*$/;
$scope.onSubmit = function(){
console.log("form submitted");
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="formCtrl">
<form name="myForm" ng-submit="onSubmit()">
<input type="text" ng-model="price" name="myfield" ng-pattern="matchPatternPassword" required ng-trim="false">
<span ng-show="myForm.myfield.$error.pattern">Неправильный формат!</span>
<input type="submit" value="submit"/>
</form>
</div>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей