我有一个表单,只想只允许字母,空格和撇号。我有一个带有Angular的验证器:
function geocodeLatLng(location, method) {
var res;
var geocoder = new google.maps.Geocoder;
geocoder.geocode(method, function(results, status) {
if (status === 'OK') {
if (results[0]) {
if(method.address){
res = results[0].geometry.location
var marker = new google.maps.Marker({
position: res,
draggable:true,
map: map
});
}
else {
res = results[0].formatted_address
}
show_road(results[0].geometry.location);
} else {
window.alert('good');
}
} else {
window.alert('wrong: ' + status);
}
});
return res;
}
alert (geocodeLatLng(center, {'location': center}));
第一个问题是,如果我要这么做
Validators.compose([
AppValidators.required,
Validators.minLength(2),
Validators.pattern('[a-zA-Z ]*'),
]))
验证完全无效。
否则我尝试过类似的事情
Validators.pattern(/[a-zA-Z ]*/)
但是验证似乎无效。根据{{3}}的说法,Validators.pattern('[a-zA-Z\' ]*')
Validators.pattern(/[a-zA-Z' ]*/)
Validators.pattern('[a-zA-Z\s']*')
Validators.pattern(/[a-zA-Z\s']*/)
似乎是我想要的,但是验证仍然无效。
编辑:
我已经尝试了用户Thefourthbird和Brandon的答案(虽然很欣赏),但从它仍然认为无效的意义上说,它是行不通的。
我已在此处注销[a-zA-Z' ]
:
FormControl
:
console.log(this.member.control.firstName)
答案 0 :(得分:1)
我建议将RegExp对象与模式验证器一起使用。有时在使用字符串时,我会看到验证器的行为异常。
对于模式本身,^[a-zA-Z ']+$
就足够了,所以:
...Validators.pattern(new RegExp(/^[a-zA-Z ']+$/))
应该可以帮助您。 RegEx验证程序:https://regex101.com/r/W35zae/1
答案 1 :(得分:0)
我认为最直接的解决方案是改用模式验证器:
<input name="firstName" ngModel pattern="[a-zA-Z' ]{2,}">
请参阅:https://angular.io/api/forms/PatternValidator
以下是一些实现示例:https://www.concretepage.com/angular-2/angular-2-4-pattern-validation-example(formControl,ngModel等)