我有一個返回的電子郵件地址是否有效的Oracle函數或不甲骨文Regex_like函數:返回什麼失敗
CREATE OR REPLACE FUNCTION valid_email (p_email in varchar2)
return string is
v_return varchar2(255);
cemailregexp constant varchar2(1000) := '^[a-z0-9!#$%&''*+/=?^_`{|}~-]+(\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+([A-Z]{2}|arpa|biz|com|info|intww|name|net|org|pro|aero|asia|cat|coop|edu|gov|jobs|mil|mobi|museum|pro|tel|travel|post)$';
BEGIN
if regexp_like(p_email,cemailregexp,'i') then
v_return := p_email;
else
v_return := null;
end if;
return v_return;
END;
如果電子郵件通過正則表達式
,它返回的電子郵件,否則返回結果爲NULL
我想知道的是輸入字符串的哪部分失敗,爲什麼regex_like失敗?
,而不是重新調整隻是空,如果不好,也許對原因
我想電子郵件mgptva一個新的變量; [email protected]返回:
v_return_msg =「無效字符‘;’ 7位
我不包括我對這個嘗試很抱歉,我不知道從哪裏開始,谷歌搜索處理不當是富有成果的
這是非常雄心勃勃的,因爲它是;例如,標準允許在電子郵件地址的本地部分使用@,如果使用\轉義該地址,則允許該域成爲方括號中的四部分IP地址。例如,Foo \ @ Bar @ [192.232.96.4]是電子郵件地址的合法格式。你的正則表達式不允許。所以回到你的問題:你想檢查本書中的每一條規則,或者只是指出最明顯的違規行爲(沒有@或沒有域或多個未轉義@或整個電子郵件字符串太長)?後者也許有一定意義。 – mathguy
是啊,我們只是最明顯的違規行爲...「喬\\吹」@ example.com是一個實際合法形成的電子郵件地址,但不通過正則表達式...只是試圖過濾明顯,以防止數據輸入錯誤 –
你最好的選擇imho將是一個簡單的解析器。我懷疑這可以通過一個正則表達式引擎來處理,至少有合理的努力 - 當然,甲骨文公司並沒有達到這個標準。 Perl的正則表達式實現可能是可能的。 – collapsar