ドメイン名を検証するために正規表現を使用しています (ここでの私の質問は、正規表現が適切かどうかを判断することではありません!)。
私が使用している正規表現は次のとおりです: ^(?:[a-zA-Z0-9]+(?:-*[a-zA-Z0-9])*.)+[a-zA-Z]{2 ,6}$
C# バックエンドでこの正規表現を使用すると、ドメイン名 org.comabcd に無効のフラグが付けられます (ドメイン名拡張子に 7 文字があるため)。だからこれは素晴らしいです!
この正規表現をオンラインの JavaScript 正規表現バリデーター ( http://regexpal.com/ ) で使用すると、同じ動作が見つかりました。これがまたスゴイ!!
しかし、私の UI フロントエンドは、カスタム DataAnnotationsModelValidator の Knockout JS カスタム検証でこの正規表現を使用し、ドメイン名は有効としてフラグが立てられます。
私が使用しているコードは次のとおりです。
ko.validation.rules["domainname"] = {
validator: (val: any, validate: boolean) => {
var regex = new RegExp("^(?:[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9])*\.)+[a-zA-Z]{2,6}$");
return regex.test(val);
},
message: Localization.validation_domain_name_invalid_format
};
ドメイン名拡張子に数字を含めようとすると、無効として正しくフラグが立てられるため、バリデーターが「少し」機能することはわかっています。
何が起こっているのか、正規表現が正しく使用されていないように見えるのはなぜですか?