为什么在字符串验证失败时用正则表达式验证行能正常工作?

时间:2018-12-02 11:32:20

标签: javascript regex

我想检查用户名是否只有拉丁或西里尔字母和空格(既没有数字也没有特殊字符)。很明显,所以我写了一个非常简单的正则表达式:/^[a-zA-Zа-яА-Я\s]+$/,可以完成工作。但是最近我读到了一些技巧,例如添加\n来欺骗验证。

所以我切换到:/\A[a-zA-Zа-яА-Я\s]+\z/似乎很安全,但是现在所有测试都返回false

我正在使用JavaScript进行检查,我的功能是:

stringFormat.test(login)

Mozilla控制台的输出(以节省您的时间):

stringFormat = /\A[a-zA-Zа-яА-Я\s]+\z/
/\A[a-zA-Zа-яА-Я\s]+\z/
validateString(login, stringFormat)
false
login = "ol"
"ol"
validateString(login, stringFormat)
false
validateString(login, stringFormat)
false
stringFormat = /^[a-zA-Zа-яА-Я\s]+$/
/^[a-zA-Zа-яА-Я\s]+$/
validateString(login, stringFormat)
true
login = "ol345"
"ol345"
validateString(login, stringFormat)
false
validateString("hello", stringFormat)
true
stringFormat = /\A[a-zA-Zа-яА-Я\s]+\z/
/\A[a-zA-Zа-яА-Я\s]+\z/
validateString("hello", stringFormat)
false
stringFormat = /[a-zA-Zа-яА-Я\s]+/
/[a-zA-Zа-яА-Я\s]+/
validateString("hello", stringFormat)
true
login = "ol345"
"ol345"
validateString(login, stringFormat)
true
login = "345"
"345"
validateString(login, stringFormat)
false
stringFormat = /[a-zA-Zа-яА-Я\s]+\z/
/[a-zA-Zа-яА-Я\s]+\z/
login = "ol345"
"ol345"
validateString(login, stringFormat)
false
validateString("hello", stringFormat)
false
stringFormat = /[\Aa-zA-Zа-яА-Я\s\z]+/
/[\Aa-zA-Zа-яА-Я\s\z]+/
validateString("hello", stringFormat)
true
validateString(login, stringFormat)
true
stringFormat = /\A[a-z]{5}\z/
/\A[a-z]{5}\z/
validateString("hello", stringFormat)
false
validateString("heo", stringFormat)
false

可以帮我吗?

1 个答案:

答案 0 :(得分:2)

显然\A\z在JavaScript中不受支持。

请看以下简单示例:

\A[a-z]+\Z

^[a-z]+$

我建议您使用^[a-zA-Zа-яА-Я\s]+$,已有的模式并关闭多行模式,这样可以防止^$匹配行的开头和结尾。

See this demo with sample pattern