我想在html页面中验证文本输入字段以仅接受西里尔字母。我使用正则表达式在JavaScript中编写了验证代码,如下所示:
var namevalue = document.getElementById("name")
var letters = /^[А-Яа-я]+$/;
if (namevalue.matches(letters)) {
alert("Accepted");
}
else {
alert("Enter only cyrillic letters");
}
此代码适用于除Ёё
以外的所有西里尔字母答案 0 :(得分:3)
ё
无效的问题,因为它超出范围Aа-Яя
。 Aа-Яа
位于基本西里尔字母 [0430-044F]
中,但ё
不在基本西里尔字母中。 ё
属于 Cyrillic扩展 [0400-045F]
。因为,JavaScript正则表达式引擎不是通过字母本身而是通过其字符代码进行比较,因此ё
只是超出范围。
因为我认为你的意思是现代俄语,尽管ё
是罕见但仍然广泛使用
我可能会建议这个解决方案
var namevalue = document.getElementById("name")
// please note that I added to your pattern "еЁ".
// now this matches all Russian cyrillic letters both small and caps
// plus ё and Ё
var letters = /^[А-Яа-яёЁ]+$/;
if (namevalue.matches(letters)) {
alert("Accepted");
}
else {
alert("Enter only cyrillic letters");
}
不幸的是,A-Я
和Ё
的问题深深植根于Unicode规范中。没有简单明了的解决方案。因此,对于强大的编程,您需要始终为此类情况做好准备。
答案 1 :(得分:1)
Ë
不一定是西里尔字母中的字母,因此不会出现在您使用的А-Яа-я
范围内。
您的Ë
Cyrillic:U+0401
还是拉丁语:U+00CB
?
如果您还希望捕获非西里尔文Ë
,则可能需要将此范围添加到正则表达式中:À-ÿ
:
alert(JSON.stringify("Ëë".match(/^[À-ÿ]+$/)))

如果您只想抓住西里尔字母中的Ë
,请尝试以下操作:
而不是在U+0410
(А
)开始您的范围,而是在U+0400
(Ѐ
)处开始,并以U+045F
结束{{1 }}):
џ

(最后一个范围应包括完整的西里尔字母。)
来源:Unicode character codes.您可以使用此页面查看需要添加到正则表达式的范围。
答案 2 :(得分:1)
你可以找到ёЁ的西里尔文扩展而不是А-Яа-яt