Javascript 如何改进handleBlur以忽略接受连字符作为输入中的字符长度?

Javascript 如何改进handleBlur以忽略接受连字符作为输入中的字符长度?,javascript,reactjs,Javascript,Reactjs,使用下面的输入字段,如果值小于9位或大于10位,我想在handleBlur上向用户显示确认对话框 <TextBoxField id="latitude-control" title="Latitude" name="latitude" value={latitude} maxLength={10} handleChange={this.handleChange} handleBlur={(e) =>

使用下面的输入字段,如果值小于9位或大于10位,我想在handleBlur上向用户显示确认对话框

<TextBoxField
  id="latitude-control"
  title="Latitude"
  name="latitude"
  value={latitude}
  maxLength={10}
  handleChange={this.handleChange}
  handleBlur={(e) => {
    if(e.target.value.length < 9 || (e.target.value.length > 9)) {
      this.setState({showConfirmDialog: true}),
      this.props.handleBlur(e);
    }
  }}
/>

我认为你要做的是把你的价值转化为绝对价值

<TextBoxField
  id="latitude-control"
  title="Latitude"
  name="latitude"
  value={latitude}
  maxLength={10}
  handleChange={this.handleChange}
  handleBlur={(e) => {
  let valueLength = e.target.value.length;
  valueLength = Math.abs(valueLength);
    if(valueLength < 9 || (valueLength > 9)) {
      this.setState({showConfirmDialog: true}),
      this.props.handleBlur(e);
    }
  }}
/>
{
设valueLength=e.target.value.length;
valueLength=数学参数abs(valueLength);
如果(valueLength<9 | |(valueLength>9)){
this.setState({showConfirmDialog:true}),
本.道具.车把(e);
}
}}
/>

我认为你要做的是将你的价值转化为绝对价值

<TextBoxField
  id="latitude-control"
  title="Latitude"
  name="latitude"
  value={latitude}
  maxLength={10}
  handleChange={this.handleChange}
  handleBlur={(e) => {
  let valueLength = e.target.value.length;
  valueLength = Math.abs(valueLength);
    if(valueLength < 9 || (valueLength > 9)) {
      this.setState({showConfirmDialog: true}),
      this.props.handleBlur(e);
    }
  }}
/>
{
设valueLength=e.target.value.length;
valueLength=数学参数abs(valueLength);
如果(valueLength<9 | |(valueLength>9)){
this.setState({showConfirmDialog:true}),
本.道具.车把(e);
}
}}
/>

您可以从该值中去掉
-
,然后对照该值检查长度

const value=e.target.value;
常量=值。替换('-','');
//对照剥离长度检查长度

您可以从该值中去掉
-
,然后对照该值检查长度

const value=e.target.value;
常量=值。替换('-','');
//对照剥离长度检查长度

使用正则表达式是实现这一点的一种方法

<TextBoxField
  id="latitude-control"
  title="Latitude"
  name="latitude"
  value={latitude}
  maxLength={10}
  handleChange={this.handleChange}
  handleBlur={(e) => {

    var strippedLength = e.target.value.replace(/-/, '').length

    if(strippedLength  < 9 || strippedLength  > 9) {
      this.setState({showConfirmDialog: true}),
      this.props.handleBlur(e);
    }
  }}
/>
{
var strippedLength=e.target.value.replace(/-/,'').length
如果(条纹长度<9 | |条纹长度>9){
this.setState({showConfirmDialog:true}),
本.道具.车把(e);
}
}}
/>
代码很容易理解

.replace将一个字符串替换为另一个字符串。在本例中,我们使用了一个正则表达式,它捕获-字符并将其替换为零

两个正斜杠定义了正则表达式的模式

我会仔细阅读RegEx,因为它将来肯定会对你有所帮助。
使用正则表达式是实现这一点的一种方法

<TextBoxField
  id="latitude-control"
  title="Latitude"
  name="latitude"
  value={latitude}
  maxLength={10}
  handleChange={this.handleChange}
  handleBlur={(e) => {

    var strippedLength = e.target.value.replace(/-/, '').length

    if(strippedLength  < 9 || strippedLength  > 9) {
      this.setState({showConfirmDialog: true}),
      this.props.handleBlur(e);
    }
  }}
/>
{
var strippedLength=e.target.value.replace(/-/,'').length
如果(条纹长度<9 | |条纹长度>9){
this.setState({showConfirmDialog:true}),
本.道具.车把(e);
}
}}
/>
代码很容易理解

.replace将一个字符串替换为另一个字符串。在本例中,我们使用了一个正则表达式,它捕获-字符并将其替换为零

两个正斜杠定义了正则表达式的模式

我会仔细阅读RegEx,因为它将来肯定会对你有所帮助。

我看到两种可能的方法。去掉负号或取其绝对值。@JordanSchnur感谢您的回答。我不知道我该怎么做这两件事。你能帮帮我吗?我有两种可能的方法。去掉负号或取其绝对值。@JordanSchnur感谢您的回答。我不知道我该怎么做这两件事。你能帮我一下吗?你需要对
e.target.value
执行替换,而不仅仅是
e
@Jordan-我仍然认为输入
-12.123456
的长度为10。看起来hpyen仍然作为字符计数。@dev101抱歉,我的正则表达式不应该在引号中。现在试试看。@JordanSchnur-是的,它现在起作用了。非常感谢你。非常感谢您的帮助。您需要对
e.target.value
执行替换,而不仅仅是
e
@Jordan-我仍然认为输入
-12.123456
的长度为10。看起来hpyen仍然作为字符计数。@dev101抱歉,我的正则表达式不应该在引号中。现在试试看。@JordanSchnur-是的,它现在起作用了。非常感谢你。真的很感谢你的帮助。为什么这被否决了?我很好奇我是否犯了错误。为什么这被否决了?好奇我是否犯了错误。长度不可能是负数。这不是op所要求的。这将得到长度的绝对值,它总是正的。@JordanSchnur我想他问的是,在没有初始连字符的情况下得到值,只计算数值。所以我认为
Math.abs()
可以做到这一点。@JasperKetelaar是的,我知道长度不可能为负。但可能他使用了一些静态值并检查了测试目的。我只是从给出的例子的角度来回答。长度不可能是负的。这不是op所要求的。这将得到长度的绝对值,它总是正的。@JordanSchnur我想他问的是,在没有初始连字符的情况下得到值,只计算数值。所以我认为
Math.abs()
可以做到这一点。@JasperKetelaar是的,我知道长度不可能为负。但可能他使用了一些静态值并检查了测试目的。我只是从给出的例子的角度来回答。