REGEXを使ったVR

[Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)


+ [【Help】一般的なREGEX関数を用いた正規表現](https://help.salesforce.com/s/articleView?id=000334073&type=1)
+ [電話番号/カード番号](https://qiita.com/Keiji_otsubo/items/c6a66d970f11662f7aee)
+ [Common REGEX Validation](https://help.salesforce.com/s/articleView?id=000334073&type=1)
+ [Regex for Mobile Phone Validation](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000BrjqmSAB)
+ [Automatically convert phone number to E. 164 format](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000H1WqE)

----------------------------------------------------
# 改行

+ [Use REGEX to throw validation rule error for new line and/or carriage return](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007GFXaj)

```
REGEX(<field name>, '(.*\r?\n.*)*')
```

+ [Blogs Implementation of REGEX in Salesforce](https://www.jadeglobal.com/blog/implementation-regex-salesforce)

# 全角文字

+ [[入力規則]半角チェック（全角はNG）](http://www.fukasukobo.com/salesforce-com/code/ruliguizebanjiaochekkuquanjiaohang)

これは全角だけOKの場合の例

```
AND(
NOT(ISBLANK(  Street__c ) ),
NOT(REGEX(Street__c, "[^ -~｡-ﾟ]*") )
)
```

# 半角カナと数字を制御する入力規則について

+ [半角カナと数字を制御する入力規則について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007HNDLu)

```
NOT(REGEX( 項目 , "^[ｦ. ｰ-ﾟ()]*$"))
```

```
NOT(REGEX( admissible__c  , "^[0-9T]*$" ))
```

+ [【全角カタカナ】かつ【半角または全角スペースを含める】入力規則](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007XIUPo)

```
AND(
NOT(ISBLANK( Name)),
NOT(REGEX( Name,"^[ｦ-ﾝ]+[ ]{0,1}+[　]{0,1}+[ｦ-ﾝ]*$"))
)
```


# メールアドレス

email@email..com (with an additional dot).

```
REGEX({!Email_Address}, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,4}$")
```

+ [Validating Email Address In Flow](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007XIPWX)


# なかなか素晴らしい。

3行までは認めているが、さらに１行は50文字までとしたい。

```
AND( 
NOT(ISBLANK(BillingStreet)), 
(NOT(OR( REGEX(BillingStreet,".{0,50}"), REGEX(BillingStreet,".{0,50}\r\n.{0,50}\r\n.{0,50}"))))
)
```

[Validation rule for Billing Address](https://qiita.com/drafts/f153991a269e69e9c2de/edit)


```
AND( 
NOT(ISBLANK( Name)), 
NOT(REGEX(Name, "^[-@\"#!$\\%^&*()_+|~=`{}\\[\\]:;'<>?,.\\/a-zA-Z0-9 \\x5C]*$")) 
)
```

[Regex formula for validation rule](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDNwH)

# カンマで繰り返し何個も入力できる場合の書き方
(){0,)が重要

```
AND(
NOT(ISBLANK( Additional_order_numbers__c )),
NOT(REGEX( Additional_order_numbers__c ,'(^[0-9]{8}[ ][0-9]{2}[ ][0-9]{5}|^[0-9]{3}[ ][0-9]{9}|^[0-9]{10})(,[0-9]{8}[ ][0-9]{2}[ ][0-9]{5}|,[0-9]{3}[ ][0-9]{9}|,[0-9]{10}){0,}$'))
)
```
[validation rule - REGEX](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Dz2bCSAR)


# 説明を求める質問（英語の回答例として使える）

[Can somebody please explain me what this REGEX validation means?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000CgRH5SAN)

```
NOT(REGEX(Phone, "[+]{0,1}[-\\s\\.\\/0-9()]+"))
```

# 組み合わせ例

[Complex validation rule formula](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000BuPVt)

```
AND(
OR(
ISNEW(),
DATEVALUE(CreatedDate) = DATEVALUE("2021-11-17")
),
OR(
AND(
NOT(ISBLANK(field__c)),
LEFT(field__c,1) <>"0",
OR(
NOT(REGEX(field__c,"^[0-9a-zA-Z]*$")),
NOT(OR(
LEN(field__c) = 9,
LEN(field__c) = 10,
LEN(field__c) = 15
))
)
),
AND(
NOT(ISBLANK(field__c)),
LEFT(field__c,1) ="0",
NOT(REGEX(field__c,"^[0-9]{3}-[0-9]{3}-[0-9]{3}$"))
)
)
)
```

#  |,^,` を入力させない

```
AND( 
NOT(ISBLANK( field__c)), 
NOT(REGEX(field__c, "^[-@\"#!$\\%&*()_+~={}\\[\\]:;'<>?,.\\/a-zA-Z0-9 \\x5C]*$")) 
)
```

+ [参考](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000HDNwH)
+ [validation rule using regex](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000MgH4V)


# この数字を 15 文字で表示したいのですが、最初の文字は 1 または 2 にし、文字を含めないでください。

+ [RegEx](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgBU2)

```
REGEX(TEXT( Numero_de_securite_social__c) , "^([12]{2})([0-9]{0,13})$")
```

# Error: Incorrect argument type for function 'REGEX()'.

数値型だとエラーになるのでTEXT関数を使う。

+ [Error: Incorrect argument type for function 'REGEX()'.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007X9H8L)

REGEX(text, regex_text) and replace text with the text field, and regex_text with the regular expression you want to match.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5dfec2e6-e3ec-9287-9af8-cd6311dfe99d.png)


# 正規表現の詳しい説明

ここれから抜粋
[Explorations Into Salesforce](https://explorationsintosalesforce.wordpress.com/2017/06/08/regex-in-salesforce/)

## 使用できる場所
+ バリデーションルール(フィールドで必要なものと一致するREGEXを作成する場合、次のように最終結果を否定する必要があることを意味します。)
+ Apex
+ フロー

## 使用できない場所
+ VF Page
+ 数式項目

##  説明
+ ()でグループ化
+ .（ピリオド）–行末記号以外の任意の文字に一致します
+ ?（疑問符）–前のトークンを0回または1回一致させます
+ *（アスタリスク）–前のトークンと0回以上一致する
+ +（プラス記号）–前のトークンと1回以上一致する
+{n} –前のトークンをn回一致させる
+{n,} –前のトークンとn回以上 一致する
 注：{0,}は*と同等であり、{1,}は+と同等です。
+ {n,m} –前のトークンと少なくともn回、m回 以下一致する
 注：{0,1}は?と同等です