我正在尝试验证用户输入的字符串是否用作信用卡对账单上的对账单描述以描述购买。
要求是:
- 长度必须在 5 到 22 个字符之间
- 必须至少包含一个字母(不区分大小写)
- 不能包含这些字符:< >\' "
- 只允许使用 ASCII 字符
这是我到目前为止所得到的,有点在工作:
/^(?=.*?[a-zA-Z])[a-zA-Z0-9]{5,22}$/gm
...因为它正确地检查了 5-22 个字符的长度并检查了至少一个字母。但是,它不允许所有特殊字符和变音符号,而不仅仅是少数不允许的字符和变音符号。我如何修改它以允许其他允许的字符?
最佳答案
您可以使用正向先行断言一个字符,使用负向先行断言不匹配字符类中列出的任何字符。
对于 Javascript,您可以使用不区分大小写的标志 /i
并使用 [a-z]
.
编辑:作为Wiktor Stribiżew指出,要仅匹配 ASCII 字符,您可以使用 [\x00-\x7F]
而不是使用点。
^(?=.*[a-z])(?!.*[<>\\'"])[\x00-\x7F]{5,22}$
-
^
字符串开始 -
(?=.*[a-z])
正向前瞻检查是否有 ASCII 字母 -
(?!.*[<>\\'"])
否定前瞻检查字符类中没有任何字符 -
[\x00-\x7F]{5,22}
匹配任何 ASCII 字符 5 - 22 次li> -
$
字符串结束
例如:
const regex = /^(?=.*[a-z])(?!.*[<>\\'"])[\x00-\x7F]{5,22}$/gmi;
参见 regex demo
关于javascript - 用于验证信用卡对账单的对账单描述符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54030055/