我想对名为“城市或邮政编码”的输入字段进行客户端验证,我对用户输入有单独的验证。我首先区分输入是数字还是字符串,然后使用单独的块来验证它们。我想知道是否有一种优雅的方式,或者换句话说,一个正则表达式来验证输入
validateCityOrPostalCode(value) {
const isnum = /^\d+$/.test(value);
if (isnum) {
const patternForZipCode = RegExp('^[0-9]{5}$');
const result = patternForZipCode.test(value);
return result;
}
const onlyLetters = RegExp('^[a-zA-Z ]$').test(value);
if (onlyLetters) {
const patternForCity = RegExp('^([a-zA-Z -]{1,50})$');
const validCityName = patternForCity.test(value);
return validCityName;
}
}
我打算做什么
validateCityOrPostalCode(value) {
const patternForCityOrPostalCode = '<The regex that I am looking for >'
const result = patternForCityOrPostalCode.test(value);
return result;
}
有效案例: 5位邮政编码,如10016,12345,44444等(准确的5位数) “纽约”,“波士顿”,“芝加哥”,xx,xxxx等城市(1至50个字符)
无效案例: 1234 123 12 1 空字符串 Boston33 333Chicago
答案 0 :(得分:1)
您可以在正则表达式中使用管道,其行为类似于OR。
示例代码段:
function validateCityOrPostalCode(value) {
return /^([0-9]{5}|[a-zA-Z][a-zA-Z ]{0,49})$/.test(value);
}
var values = ['12345','New York','1234','',' ','Boston33','333Chicago'];
values.forEach(
function(value) {
console.log(value +":"+ validateCityOrPostalCode(value));
});
&#13;