Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 使用带有特殊字符的正则表达式设置数字格式_Javascript_Regex_Reactjs - Fatal编程技术网

Javascript 使用带有特殊字符的正则表达式设置数字格式

Javascript 使用带有特殊字符的正则表达式设置数字格式,javascript,regex,reactjs,Javascript,Regex,Reactjs,我正在学习正则表达式,我想在react应用程序中实现它,所以当我在输入字段上写东西时,我想让用户只写数字,最多写一个空格。此字符串还必须以+字符开头。我的正则表达式工具向我展示了很好的结果,但在应用程序中我不能写任何东西 const handlePhone = ({currentTarget}) => { let val = currentTarget.value; // Regular expression const reg = /^\+\d+/g; c

我正在学习正则表达式,我想在react应用程序中实现它,所以当我在输入字段上写东西时,我想让用户只写数字,最多写一个空格。此字符串还必须以+字符开头。我的正则表达式工具向我展示了很好的结果,但在应用程序中我不能写任何东西

const handlePhone = ({currentTarget}) => {
    let val = currentTarget.value;
    // Regular expression
    const reg = /^\+\d+/g;
    const isNumber = val.match(reg);
    if (isNumber || val === '') {
      setFieldValue('phone', val);
    }
  };
我想用这个表达式来实现这个:从+开始,然后你可以写一些数字

但在应用程序中,我不能写任何东西。为什么此工具与此实时匹配如此不同

为此:

const reg = /^\+\d+( \d+)*$/;

这应该可以:

^\+?\d+( \d+)?$
  • ^
    -开始锚定
  • \+?
    -可选地以加号开头
  • \d+
    -要求后面至少有一位数字
  • (\d+)
    -可选地允许空格后跟一个或多个数字
  • $
    -端锚

尝试此正则表达式,并在此中检查正则表达式

const reg = /^\+\d+ \d+$/gm;
^+:-将检查字符串是否以+开头
\d+:-这将允许1个或多个数字
\s:-这将只允许一个空间
$:-这将确保字符串以数字结尾,并限制第二次使用空格字符


我想你需要一些非常简单的东西,比如
/^\+\d*?\d*$/
,这意味着:

  • ^\+
    以“+”开头
  • \d*
    然后是零位或更多位
  • (空格?)
  • \d*
    然后是零位或更多位
  • $
    字符串结尾
例如

函数校验值(el){
设re=/^\+\d*?\d*$/;
document.getElementById('err').textContent=re.test(el.value)?“good”:“bad”;
}


我的正则表达式非常臃肿,但它应该可以工作

const regex = \^\+[\d]+(\s)*(\d)+$\g;
  • ^+只是否定了+
  • [\d]+允许您选择0-9位数1次或更多次
  • (\s)*是一个组,它允许0或1个空间
  • (\d)+$可以一次或多次拾取0-9之间的数字。美元只是最后的锚

  • 因为您的正则表达式要求已经存在
    +
    和1位数字。更改为
    const reg=/^\+\d*(?:\s\d*)?$/。此外,它仅适用于实时验证。提交时验证可能需要另一个正则表达式,如
    const reg=/^\+\d+(?:\s\d+)$/。此外,使用
    RegExp#test(String)
    检查字符串是否与regex匹配也是有意义的。因此,您可以使用按键、向上、向下、,funkychickendance?我正在用Formik Library的onChange方法调用它。我的isNumber常量返回我'null',我不能为你写任何东西添加屏幕截图。它还将接受2个空格。i、 e.,+123 132。哪一个OP不想要。@Freestyle 09我对react不太熟悉,无法提出代码改进建议。@Freestyle 09抱歉,我无法提供更多帮助,但我对react不太熟悉。我更新了我的正则表达式,使前面的
    +
    符号可以根据您对另一个答案EP的评论进行选择。OP没有说它必须有数字,只是它只能有数字和最大的1个空间。哇,太好了,你能更新这个选项以+或数字开头吗?但是当你写数字“+”时,就不允许了??我可以,但是…regexp将以
    ^[+\d]开头
    。你有什么好的资料可以教我更多的正则表达式技巧吗?
    \s
    允许任何空格字符,而不仅仅是空格。