使用带有特殊字符的正则表达式进行数字格式化

Posted

技术标签:

【中文标题】使用带有特殊字符的正则表达式进行数字格式化【英文标题】:Number formatting using regex with special characters 【发布时间】:2020-01-12 05:37:42 【问题描述】:

我正在学习正则表达式,我想在 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+)*$/;

【问题讨论】:

因为您的正则表达式要求 + 和 1 位数字已经存在。更改为const reg = /^\+\d*(?:\s\d*)?$/;。此外,它仅适用于实时验证。您可能需要另一个正则表达式来进行提交验证,例如const reg = /^\+\d+(?:\s\d+)?$/;。此外,使用RegExp#test(String) 检查字符串是否与正则表达式匹配也是有意义的。 所以你用按键、上、下、funkychickendance 来调用它? 我用 Formik 库中的 onChange 方法调用它 【参考方案1】:

这应该可行:

^\+?\d+( \d+)?$
^ - 开始锚点 \+? - 可选择以加号开头 \d+ - 至少需要一位数字才能关注 ( \d+)? - 可选地允许一个空格,后面必须跟一个或多个数字 $ - 结束锚

https://regex101.com/r/pxbefb/1

【讨论】:

有了这个我的 isNumber const 返回我'null',我不能写任何东西 为你添加截图 它也会接受 2 个空格。即 +123 123 132 。哪个 OP 不想要。 @Freestyle09 我对建议代码改进的反应不够熟悉。 @Freestyle09 对不起,我帮不上忙,但我不熟悉反应。根据您对其他答案之一的评论,我更新了我的正则表达式以使领先的 + 符号可选【参考方案2】:

试试这个正则表达式,并检查这个 LINK

中的正则表达式
const reg = /^\+\d+ \d+$/gm;

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

【讨论】:

\s 允许任何空白字符,而不仅仅是空格。【参考方案3】:

我认为您需要像/^\+\d* ?\d*$/ 这样非常简单的东西,这意味着:

^\+ 以“+”开头 \d* 然后是零个或多个数字 ?(空格?)然后是零个或一个空格 \d* 然后是零个或多个数字 $ 字符串结束

例如

function checkValue(el) 
  let re = /^\+\d* ?\d*$/;
  document.getElementById('err').textContent = re.test(el.value)? 'good':'bad';
<input oninput="checkValue(this)"><br>
<span id="err"></span>

【讨论】:

是的。 OP 没有说它必须有数字,只是它只能有数字和最多 1 个空格。 哇,太好了,您能否将其更新为可选地以 + 或数字开头,但是当您写数字时,“+”不再被允许?? 可以,但是......然后正则表达式将以^[+\d]开头。 你有什么好的资源吗?我可以在哪里教更多的正则表达式技术?【参考方案4】:

我的正则表达式相当臃肿,但它应该可以工作。

const regex = \^\+[\d]+(\s)*(\d)+$\g;
    ^+ 只是否定了 + 的力量 [\d]+ 让您选择 0-9 位数字 1 次或更多次 (\s)* 是一个组,它允许 0 或 1 个空格 (\d)+$ 可以一次或多次选择 0-9 之间的数字。而 $ 只是结束锚

【讨论】:

以上是关于使用带有特殊字符的正则表达式进行数字格式化的主要内容,如果未能解决你的问题,请参考以下文章

带有大写,小写,数字和特殊字符的复杂密码的正则表达式(Python)

正则表达式格式

基本的正则表达式

js利用正则表达式提取字符串中的特殊字符串

js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位

js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位