我正在使用以下功能验证街道地址,该功能适用于所有英文字母。但它不接受这些信件ö, Ö, ä, Ä
。如何更改以下函数以使其也接受这些字母?
validateAddress = function (val) {
var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/;
if (streetRegex.test(val)) return true;
else return false;
}
我正在使用以下功能验证街道地址,该功能适用于所有英文字母。但它不接受这些信件ö, Ö, ä, Ä
。如何更改以下函数以使其也接受这些字母?
validateAddress = function (val) {
var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/;
if (streetRegex.test(val)) return true;
else return false;
}
现代浏览器应该能够处理正则表达式中的这些字符。在 Chrome 或 Firefox 上查看此示例。
var str = 'öabÖcdäefgÄh';
console.log( str.match(/[öä]/gi) ); //=> ["ö", "Ö", "ä", "Ä"]
但是您始终可以将这些字符转换为 ascii 或 unicode 并改用它:
function toAscii( str ) {
return str.replace(/./g, function( char ) {
return '\\x'+ char.charCodeAt(0).toString(16).toUpperCase();
});
}
// Use RegExp constructor
var regex = new RegExp('...'+ toAscii('ä') +'...');
您可以使用正则表达式
/^\D+\d+,\D+$/
它也适用于 ä 和 ö 字符。
您的问题是 \w 匹配不包括 ö、Ö 等的字符集。您需要考虑另一种方法来匹配允许字符的字符范围。也许您应该换一种方式并匹配非数字字符:
var re = /\D+\d+,\s*[\s\w]+$/
否则,您将需要根据您打算支持的字母(即不同语言的字母)指定各种字符范围。我认为正则表达式是基于 ASCII 的,它是基于英文字母表的。