正则表达式阻止字符串中超过3个数字
我试图阻止包含超过 3 个数字的任何字符串并阻止特殊字符。我有特殊字符部分。我只是缺少数字部分。
例如:
"Hello 1234" - Not Allowed
"Hello 123" - Allowed
我尝试了以下方法:
"Hello 1234" - Not Allowed
"Hello 123" - Allowed
最后一个是我得到的最接近的,因为它完全防止输入任何特殊字符和任何数字。
我已经浏览了以前的帖子,但我的内容很短。
编辑以澄清
本质上,我试图找到一种方法来防止客户在表单上输入 PII。不允许提交的字符串中包含超过 3 个数字。
Hello1234 - 不允许 12345 - 不允许 1111 - 不允许
当用户输入字符串时,评论部分中的任何地方都应该有超过 3 个数字。
回答
关于您尝试过的模式
^[!?., A-Za-z0-9]+$该模式匹配任何列出的 1+ 次,包括 1 个或多个数字((^[!?., A-Za-z]d)([0-9]{3}+$))如果{3}+支持,则模式匹配字符类中的单个字符,1 位数字后跟 3 位数字^((d){2}[a-zA-Z0-9,.!? ])*$该模式重复 0+ 次匹配字符类中列出的 2 位和 1 位
如果支持断言不是连续 4 位数字,您可以使用负前瞻。
^(?!.*d{4})[a-zA-Z0-9,.!? ]+$
^(?!.*d{4})[a-zA-Z0-9,.!? ]+$
正则表达式演示
如果总共不能有 4 位数字,但出现了 0-3 次:
解释
^字符串的开始[a-zA-Z,.!? ]*匹配任何列出的 0+ 次(没有数字)(?:d[a-zA-Z,.!? ]*){0,3}重复 0 - 3 次匹配单个数字后跟可选的列出字符(同样没有数字)$字符串结束
正则表达式演示
如果您不想匹配空字符串并且支持前瞻:
^(?!$)[a-zA-Z,.!? ]*(?:d[a-zA-Z,.!? ]*){0,3}$
查看另一个正则表达式演示