Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和regexp只接受格式中的希腊字符_Php_Regex - Fatal编程技术网

PHP和regexp只接受格式中的希腊字符

PHP和regexp只接受格式中的希腊字符,php,regex,Php,Regex,我需要一个正则表达式,它在我的表单(PHP)中只接受希腊字符和空格作为名称字段。 我在网上尝试了一些发现,但没有成功。任何帮助都将不胜感激。我对希腊字母表不太熟悉,但如果您想使用罗马字母表,您可以这样做: /^[a-zA-Z\s]*$/ 因此,要使用希腊文实现这一点,需要将a和z替换为希腊文字母表的第一个和最后一个字母。如果我没记错的话,它们是α和ω。因此,代码应该是: /^[α-ωΑ-Ω\s]*$/ utf-8中的希腊语和科普特语似乎在U+0370-U+03FF范围内。请注意:空格、a-、

我需要一个正则表达式,它在我的表单(PHP)中只接受希腊字符和空格作为名称字段。
我在网上尝试了一些发现,但没有成功。任何帮助都将不胜感激。

我对希腊字母表不太熟悉,但如果您想使用罗马字母表,您可以这样做:

/^[a-zA-Z\s]*$/
因此,要使用希腊文实现这一点,需要将
a
z
替换为希腊文字母表的第一个和最后一个字母。如果我没记错的话,它们是α和ω。因此,代码应该是:

/^[α-ωΑ-Ω\s]*$/

utf-8中的希腊语和科普特语似乎在U+0370-U+03FF范围内。请注意:空格、a
-
、a
等都不是……

UTF-8中的现代希腊字母表位于

因此,您需要接受纯希腊语字符的正则表达式是:

$regex_gr = '/^[\x{0386}-\x{03CE}]+$/u';
或(带空格)


完整字母解决方案,带重音字母:

/^[A-Za-zΑ-Ωα-ωίϊΐόάέύϋΰήώ]+$/

这里的其他答案不适合我。希腊Unicode字符包含在以下两个块中

  • 希腊语和科普特语U+0370至U+03FF(普通希腊字母)
  • 希腊文扩展U+1F00至U+1FFF(带变音符号的希腊文字母)
以下正则表达式匹配整个希腊语单词:

[\u0370-\u03ff\u1f00-\u1fff]+
我将让读者将其翻译成他们可能使用的任何编程语言格式

另见

对我有效的是
/^[a-zA-Z\p{Greek}]+$/u

资料来源:

为了详细说明leo pal的答案,一个更完整的正则表达式,它甚至可以接受大写希腊字母,如下所示:

/^[α-ωΑ-ΩίϊΐόάέύϋΰήώΊΪΌΆΈΎΫΉΏ\s]+$/
有了这个,您可以:

  • α-ω
    -小写字母
  • Α-Ω
    -大写字母
  • 带所有(现代)变音符号的小写字母
  • 带所有(现代)变音符号的大写字母
  • \s
    -任何空白字符

注:以上不考虑古希腊的发音(ᾶ, ἀ,

刚刚在优秀的网站上注意到希腊字符的范围从“Ά”(902)到“ώ”(974),其中有3个字符不是阿帕贝字符:“·”(903)和不可打印字符0907、0909 因此,范围
[Ά-ώ]
将覆盖99.99%的案例


使用
(?![·\u0907\u0909])[Ά-ώ]
覆盖100%。(虽然我在PHP中没有检查这一点)

每当有人试图这样限制输入范围时,我会问自己:这真的是个好主意吗?您可能有一个有效的用例,但通常情况下这是过分的-想象一个居住在希腊的非希腊名字的人,或者一个外国人试图在世界其他地方输入一个临时地址,等等。无论哪种方式,您都应该添加更多信息:您正在比较的数据是什么字符集?UTF-8?你尝试了哪些发现?(否则你可能会得到完全相同的建议。)看起来这几乎是早期(6个多月前)答案的复制/粘贴。。。如果前面的答案有一些显著的改进,最好概括/解释一下。谢谢。当希腊字母上面有带符号的修饰语时?@blackuprise-那将是一个完全不同的问题。处理变音符号是很重要的。@JasonCoyne-这个答案不能解释带变音符号的大写字母,尽管
i
标志可以解决这个问题。尽管如此,出于几个原因,对我来说,把它们全部写出来似乎不是最好的方法。不管怎样,如果你是反对者,请看我之前的评论:@blackuprise的问题是一个不同的用例。这是对@bikey77问题的书面回答,显然它解决了问题。除了你的回答之外,我还建议如下:
/^[A-Za-zΑ-Ωα-ωίάίΰΰΰΰ]+$/
。请注意,我已将第二个范围从
A-z
更改为
A-z
。这不包括其他希腊字母重音。请参阅扩展的希腊Unicode块。这还需要包括Ά、Έ、Ί、Ό、⎍、Ή
/^[α-ωΑ-ΩίϊΐόάέύϋΰήώΊΪΌΆΈΎΫΉΏ\s]+$/