0

我正在使用以下功能验证街道地址,该功能适用​​于所有英文字母。但它不接受这些信件ö, Ö, ä, Ä。如何更改以下函数以使其也接受这些字母?

validateAddress = function (val) {
        var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/;
        if (streetRegex.test(val)) return true;
        else return false;
    }
4

3 回答 3

2

现代浏览器应该能够处理正则表达式中的这些字符。在 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('ä') +'...');
于 2012-11-13T06:27:48.637 回答
1

您可以使用正则表达式

/^\D+\d+,\D+$/

它也适用于 ä 和 ö 字符。

于 2012-11-13T06:41:31.040 回答
0

您的问题是 \w 匹配不包括 ö、Ö 等的字符集。您需要考虑另一种方法来匹配允许字符的字符范围。也许您应该换一种方式并匹配非数字字符:

var re = /\D+\d+,\s*[\s\w]+$/

否则,您将需要根据您打算支持的字母(即不同语言的字母)指定各种字符范围。我认为正则表达式是基于 ASCII 的,它是基于英文字母表的。

于 2012-11-13T06:42:09.363 回答