s1syphos/php-gesetze

链接德国法律规范,无依赖且符合GDPR

0.7.2 2022-11-27 11:18 UTC

This package is auto-updated.

Last update: 2024-08-27 21:16:04 UTC


README

License Packagist Build

链接德国法律规范,无依赖且符合GDPR。 php-gesetze自动将法律引用转换为a标签 - 一切尽在其中。

此库还有一个Python版本,名为py-gesetze

有关API文档(由phpDocumentor提供),请参阅此处

安装

它适用于Composer

composer require s1syphos/php-gesetze

入门指南

在调用主类时,您可以指定首选提供者(或“驱动程序”),如下所示

$object = new \S1SYPHOS\Gesetze\Gesetz('dejure');

还可以将两个或多个驱动程序之一指定为数组

$object = new \S1SYPHOS\Gesetze\Gesetz(['dejure', 'buzer']);

注意: 默认为所有可用驱动程序,这是一个很好的整体选择,因为支持的法规种类繁多。可能的值有gesetze'dejure''buzer''lexparency'

默认情况下,php-gesetze将遍历所有已知驱动程序,直到找到匹配项。

使用方法

从那里,以下函数可用

analyze(string $string): array

分析单个法律规范

$result = \S1SYPHOS\Gesetze\Gesetz::analyze('Art. 1 II GG');

var_dump($result);

# array(6) {
#   ["norm"]=>
#   string(1) "1"
#   ["absatz"]=>
#   string(2) "II"
#   ["satz"]=>
#   string(0) ""
#   ["nr"]=>
#   string(0) ""
#   ["lit"]=>
#   string(0) ""
#   ["gesetz"]=>
#   string(2) "GG"
# }

validate(string $string): bool

验证单个法律规范(跨所有选定提供者

$obj = new \S1SYPHOS\Gesetze\Gesetz();

var_dump($obj->validate('§ 433 II BGB'));

# bool(true)

foreach ($obj->extract('While § 433 II BGB exists, Art. 4c GG does not!') as $match) {
    var_dump($obj->validate($match);
}

# bool(true)
# bool(false)

注意: 在本库的上下文中,有效意味着至少由一个提供者可链接,即在他们的数据库中可找到

roman2arabic(string $string): string

将罗马数字转换为阿拉伯数字

echo \S1SYPHOS\Gesetze\Gesetz::roman2arabic('IX');

# 9

extract(string $string): array

将法律规范作为字符串数组提取

$obj = new \S1SYPHOS\Gesetze\Gesetz();

$result = $obj->extract('This string contains Art. 12 Abs. 1 GG and Art. 2 Abs. 2 DSGVO - for educational purposes only.')

var_dump($result);

# array(2) {
#   [0]=>
#   string(17) "Art. 12 Abs. 1 GG"
#   [1]=>
#   string(19) "Art. 2 Abs. 2 DSGVO"
# }

gesetzify(string $string, callable $callback): string

将法律引用转换为HTML链接标签

$obj = new \S1SYPHOS\Gesetze\Gesetz();

echo $obj->gesetzify('This is a simple text, featuring § 1 I Nr. 1 BGB as well as Art. 4c GG');

# This is a simple text, featuring <a href="https://www.gesetze-im-internet.de/bgb/__1.html" title="§ 1 Beginn der Rechtsfähigkeit">§ 1 I Nr. 1 BGB</a> as well as Art. 4c GG

注意: 为了获得更大的灵活性,您可以使用自己的callback方法作为gesetzify的第二个参数。回调函数将传递表示匹配法律规范的数组。这样,您可以使用<strong>标签来突出显示它们,而不是将它们转换为a标签。默认:(私有)方法linkify

示例

include_once 'vendor/autoload.php';

# Insert test string
$text  = '<div>';
$text .= 'This is a <b>simple</b> HTML text.';
$text .= 'It contains legal norms, like Art. 12 I GG.';
$text .= '.. or § 433 II nr. 2 BGB!';
$text .= '</div>';

# Initialize object
$obj = new \S1SYPHOS\Gesetze\Gesetz();

# Transform text
echo $obj->gesetzify($text);

# <div>This is a <b>simple</b> HTML text.
# It contains legal norms, like <a href="https://www.gesetze-im-internet.de/gg/art_12.html" target="_blank">Art. 12 I GG</a>.
# .. or <a href="https://www.gesetze-im-internet.de/bgb/__433.html" target="_blank">§ 433 II nr. 2 BGB</a>!
# </div>

注意: 缓存结果(以避免重复查找并节省资源)超出了本库的范围,因此完全取决于您!

配置

您可以使用以下设置来更改库的行为

$object->drivers (array)

关联数组,包含所有可用驱动程序(已初始化),其中相应的键是'gesetze''dejure''buzer''lexparency'(默认)。

$object->pattern (string)

用于检测法律规范的正则表达式。参考值如下

'/(?:§+|Art\.?|Artikel)\s*(\d+(?:\w\b)?)\s*(?:(?:Abs(?:atz|\.)\s*)?((?:\d+|[XIV]+)(?:\w\b)?))?\s*(?:(?:S\.|Satz)\s*(\d+))?\s*(?:(?:Nr\.|Nummer)\s*(\d+(?:\w\b)?))?\s*(?:(?:lit\.|litera|Buchst\.|Buchstabe)\s*([a-z]?))?.{0,10}?(\b[A-Z][A-Za-z]*[A-Z](?:(?:\s|\b)[XIV]+)?)/'

注意: 好吧,差不多吧 - 对于最新版本,请参阅src/Traits/Regex.php

$object->attributes (array)

应用于全局的其他HTML属性

$object->attributes = [
    'attr1' => 'some-value',
    'attr2' => 'other-value',
];

# .. would generate links like this:

<a href="https://example.com/some-law" attr1="some-value" attr2="other-value">§ 1 SomeLaw</a>

$object->title (false|string)

控制title属性

致谢

本库中使用的正则表达式基于Philipp Kiersch的jura_regex正则表达式包(最初用Python编写)。

特别感谢

我想感谢所有制作免费和开源软件的人 - 你们真棒。我还总是感谢反馈和错误报告:)