有没有办法可以简化这个正则表达式?

Posted

技术标签:

【中文标题】有没有办法可以简化这个正则表达式?【英文标题】:Is there a way I can simplify this regex? 【发布时间】:2021-08-28 00:07:49 【问题描述】:

我有这个正则表达式来检查文本框值的验证。它可以按我的意愿工作,但我认为可能有更简单的方法。

这是正则表达式:

@"^(?![0-9]+$)(?![0-9- `'-,]+$)(?![- `'-,]+$)[a-zA-Z0-9][a-zA-Z0-9- `'-,]*$"

这是它的作用:

as-d'' 12 3(允许) 123''123(不允许) abc---(允许) 123--123--123(不允许) avsa123(允许) ''''(不允许)

允许:

自己写的信 字母和指定的特殊字符 字母和数字 字母、数字和指定的特殊字符

不允许:

自己的数字 自行指定特殊字符 指定的特殊字符和数字 只有空格

有没有更简单的方法来写这个表达式?

【问题讨论】:

规则可以简化为“必须包含字母”吗? 这就是我的想法,但我还需要指定它也可以允许这些特定字符 【参考方案1】:

如果规则可以简化为“必须包含字母”,那么您可以像这样使用正则表达式:

^.*[a-zA-Z].*$

它接受任何字符串,但至少有一个字母字符必须在某处。如果您需要删除特定字符,您可以更改.

^[a-zA-Z0-9 /* more characters */ ]*[a-zA-Z][a-zA-Z0-9 /* more characters */ ]*$

【讨论】:

这仅在字符串不以asd'asd 之类的字符开头时才有效。但是如果你做'asd,那就不允许了 @mikeGear 你的意思是它应该或不应该以特定字符开头?你能具体说明一下吗? 我的意思是,它应该允许'asd,但它不允许。但是当字符串中的第一个值是字母时,您的正则表达式只允许特殊字符和数字 @mike 如果你在谈论上一个,它允许'asd,因为正则表达式以.* 开头。 /* more characters */部分不加想要的字符,下位不接受。 哦,抱歉,我没理解这是什么意思 /* more characters */

以上是关于有没有办法可以简化这个正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

Lua中的重复正则表达式

有没有办法将这3个分开的正则表达式加入其中? [重复]

优化Java中的正则表达式

简化正则表达式 OR 模式

有没有办法使用正则表达式进行条件替换功能

有没有办法在正则表达式中执行动态替换?