s1syphos / php-gesetze
链接德国法律规范,无依赖且符合GDPR
Requires
- php: ^7.4|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpunit/phpunit: ^8.5|^9.0
- vimeo/psalm: ^4.23
README
链接德国法律规范,无依赖且符合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编写)。
特别感谢
我想感谢所有制作免费和开源软件的人 - 你们真棒。我还总是感谢反馈和错误报告:)