Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度应用程序中与区域设置相关的regexp(小数点或彗差)_Javascript_Angular_Primeng - Fatal编程技术网

Javascript 角度应用程序中与区域设置相关的regexp(小数点或彗差)

Javascript 角度应用程序中与区域设置相关的regexp(小数点或彗差),javascript,angular,primeng,Javascript,Angular,Primeng,我有一个Angular 2+素数应用程序,它将regexp用于浮点数字: <input pInputText pattern="[0-9]*\.[0-9]" [(ngModel)]="someModel"/> 它适用于美国地区,但是一些国家使用coma表示小数,因此该模式不适合他们 目前,我正在考虑在组件代码中检索分隔符,并在其中动态构造regexp Q:如何处理依赖于区域设置的regexp,最好的/规范的方法是什么 注意:我只需要在Chrome中使用它,并且只需要考虑浏览器区

我有一个Angular 2+素数应用程序,它将regexp用于浮点数字:

<input pInputText pattern="[0-9]*\.[0-9]" [(ngModel)]="someModel"/>

它适用于美国地区,但是一些国家使用coma表示小数,因此该模式不适合他们

目前,我正在考虑在组件代码中检索分隔符,并在其中动态构造regexp

Q:如何处理依赖于区域设置的regexp,最好的/规范的方法是什么


注意:我只需要在Chrome中使用它,并且只需要考虑浏览器区域设置。我正在使用
浏览器区域设置1.0.2
进行输出。

此正则表达式将使用逗号或点匹配字符串

[0-9]*'[\.,][0-9]

如果要根据用户定义的区域设置匹配点或逗号,请使用
[0-9]*'[\.][0-9]
匹配点,使用
[0-9]*'[,][0-9]
匹配逗号

编辑

我发现:

<label for="regex">Set a pattern (regex string): </label>
<input type="text" ng-model="regex" id="regex" />

<label for="input">This input is restricted by the current pattern: </label>
<input type="text" ng-model="model" id="input" name="input" ng-pattern="regex" /><br>
设置模式(正则表达式字符串):
此输入受当前模式的限制:


有了它,您可以根据您在
#regex
中的语言环境定义regex,并将其用于其他200个输入。通过这种方式,您只需定义一次。

对于任何在本文中遇到障碍的人,这里是我的解决方案:

您可以通过注入locale\u ID来获取区域设置。 基于此,您可以使用

getLocaleNumberSymbol(locale: string, symbol: NumberSymbol): string
从@angular/common()

利用这一点,我创建了一个本地化模式的服务。模式存储在enum ValidationExpression中

服务:

import { getLocaleNumberSymbol, NumberSymbol } from "@angular/common";
import { Inject, Injectable, LOCALE_ID } from "@angular/core";
import { ValidationExpression } from "./validation-expression.enum";
...
constructor(@Inject(LOCALE_ID) private _locale: string) {
}

public getLocalizedPattern(expression: ValidationExpression): string {
    const separator = getLocaleNumberSymbol(this._locale, NumberSymbol.Decimal);
    return expression.replace("delimiter", "\\" + separator);
}
模式枚举:

export enum ValidationExpression {
   decimal = "^(\\-|\\+)?([0-9]+((delimiter)[0-9]+)?)$",
   decimalPos = "^[+]?([1-9][0-9]*(?:[delimiter][0-9]*)?|0*[delimiter]0*[1-9][0-9]*)$",
   decimalPosWithZero = "^(\\+)?([0-9]+((delimiter)[0-9]+)?)$",
   int = "^(\\-|\\+)?[0-9]+$",
   intPos = "^\\+?[1-9]\\d*$",
   intPosWithZero = "^\\+?[0-9]\\d*$"
}

请注意,我的模式不包括千位分隔符(1234.56)

我不确定您想要什么。它是用来匹配带点和昏迷的字符串的吗?或者根据当前定义的区域设置匹配点或逗号?是的,我需要根据区域设置匹配点或逗号,很明显,我必须根据区域设置使用不同的模式。但问题是如何做到这一点?请看我的编辑,这可能不是最好的解决方案,但它可以引导您使用iTunes,但这不是一个选项。我需要通用的解决方案,这一个需要
开关
和200个选项:)谷歌搜索一下,看看我的新编辑(手指交叉)我面临这个问题,你的解决方案不好,因为美国人使用点和逗号(比如192.397,22)。这意味着您提供的正则表达式无法处理该问题。您也可以使用
浏览器区域设置